Set in Java: HashSet, LinkedHashSet, TreeSet


Introduction

In Java, the Set interface is part of the java.util package. It represents a collection that does not allow duplicate elements. Common implementations of the Set interface include:

  • HashSet
  • LinkedHashSet
  • TreeSet

1. HashSet

A HashSet is an unordered collection that uses a hash table for storage. It does not guarantee the order of elements.

Example: Using HashSet

    import java.util.HashSet;
    
    public class HashSetExample {
        public static void main(String[] args) {
            // Create a HashSet
            HashSet set = new HashSet<>();
    
            // Add elements to the HashSet
            set.add("Apple");
            set.add("Banana");
            set.add("Cherry");
    
            // Attempt to add duplicate elements
            set.add("Apple");
    
            // Display the HashSet
            System.out.println("HashSet: " + set);
    
            // Check if an element exists
            System.out.println("Contains 'Banana': " + set.contains("Banana"));
    
            // Remove an element
            set.remove("Banana");
            System.out.println("After removal: " + set);
    
            // Iterate over the HashSet
            for (String fruit : set) {
                System.out.println(fruit);
            }
        }
    }
        

2. LinkedHashSet

A LinkedHashSet is an ordered version of HashSet that maintains a linked list of the entries in the order they were inserted.

Example: Using LinkedHashSet

    import java.util.LinkedHashSet;
    
    public class LinkedHashSetExample {
        public static void main(String[] args) {
            // Create a LinkedHashSet
            LinkedHashSet set = new LinkedHashSet<>();
    
            // Add elements to the LinkedHashSet
            set.add("Dog");
            set.add("Cat");
            set.add("Rabbit");
    
            // Display the LinkedHashSet
            System.out.println("LinkedHashSet: " + set);
    
            // Add a duplicate element
            set.add("Cat");
    
            // Iterate over the LinkedHashSet
            for (String animal : set) {
                System.out.println(animal);
            }
        }
    }
        

3. TreeSet

A TreeSet is a NavigableSet implementation that uses a tree for storage. It maintains elements in their natural order or a specified comparator's order.

Example: Using TreeSet

    import java.util.TreeSet;
    
    public class TreeSetExample {
        public static void main(String[] args) {
            // Create a TreeSet
            TreeSet set = new TreeSet<>();
    
            // Add elements to the TreeSet
            set.add("Orange");
            set.add("Apple");
            set.add("Banana");
    
            // Display the TreeSet
            System.out.println("TreeSet: " + set);
    
            // Attempt to add a duplicate element
            set.add("Apple");
    
            // Display elements in sorted order
            for (String fruit : set) {
                System.out.println(fruit);
            }
        }
    }
        

Differences Between HashSet, LinkedHashSet, and TreeSet

Feature HashSet LinkedHashSet TreeSet
Ordering No order Maintains insertion order Sorted order
Performance Fast (O(1) for add, remove, contains) Fast (O(1) for add, remove, contains) Slower (O(log n) for add, remove, contains)
Null Elements Allows one null Allows one null Does not allow null

Conclusion

Each Set implementation has its own use case:

  • HashSet: Use when order is not important and performance is critical.
  • LinkedHashSet: Use when you need to maintain insertion order.
  • TreeSet: Use when you need sorted elements.




Advertisement