DEV Community

Tamilselvan K
Tamilselvan K

Posted on

Day-89 Understanding Set in Java

In Java, the Set interface is part of the Collections Framework and is used to store a collection of unique elements. Unlike List, a Set does not allow duplicate values and does not support accessing elements by index.

There are three commonly used implementations of Set:

  • HashSet → Stores unique elements, does not guarantee order.
  • LinkedHashSet → Stores unique elements while maintaining insertion order.
  • TreeSet → Stores unique elements in sorted order (ascending by default).

Comparison Table

Feature HashSet LinkedHashSet TreeSet
Order No order Maintains insertion order Maintains sorted order
Duplicates Not allowed Not allowed Not allowed
Null values Allows 1 null Allows 1 null Not allowed
Underlying DS Hash table (HashMap) Hash table + Linked list Red-Black Tree
Performance O(1) add/search/remove O(1) add/search/remove O(log n) add/search/remove
Use case When order is not needed When insertion order needed When sorted data is needed

Example

Let’s look at a practical example using HashSet, LinkedHashSet, and TreeSet.

package collectiondemo;

import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.TreeSet;

public class SetDemo {
    public static void main(String[] args) {

        // HashSet -> unique elements, no order
        HashSet h1 = new HashSet();
        h1.add(5);
        h1.add(2);
        h1.add(6);
        h1.add(2);
        h1.add("hii");
        System.out.println("HashSet: " + h1);

        // LinkedHashSet -> unique elements, insertion order
        LinkedHashSet h2 = new LinkedHashSet();
        h2.add(5);
        h2.add(2);
        h2.add(6);
        h2.add(2);
        h2.add("hii");
        System.out.println("LinkedHashSet: " + h2);

        // TreeSet -> unique elements, sorted order
        TreeSet h3 = new TreeSet();
        h3.add(5);
        h3.add(2);
        h3.add(6);
        h3.add(2);
        System.out.println("TreeSet: " + h3);

        // Iteration using for-each
        System.out.println("\nIterating HashSet using for-each:");
        for (Object obj : h1) {
            System.out.println(obj);
        }

        // Iteration using Iterator
        System.out.println("\nIterating HashSet using Iterator:");
        Iterator it = h1.iterator();
        while (it.hasNext()) {
            System.out.println(it.next());
        }
    }
}
Enter fullscreen mode Exit fullscreen mode

Output Example

HashSet: [2, 5, 6, hii]
LinkedHashSet: [5, 2, 6, hii]
TreeSet: [2, 5, 6]

Iterating HashSet using for-each:
2
5
6
hii

Iterating HashSet using Iterator:
2
5
6
hii
Enter fullscreen mode Exit fullscreen mode

Key Takeaways

  • Use HashSet when you only need unique elements and don’t care about order.
  • Use LinkedHashSet when you need unique elements and want to preserve insertion order.
  • Use TreeSet when you need unique elements in sorted order.
  • Iteration can be done using for-each or Iterator.

Top comments (0)