Home Java Tutorial Sets in Java

Sets in Java

by Anup Maurya
87 minutes read

In this tutorial, you’ll learn about Sets in Java, HashSet, Key Characteristics of HashSet, TreeSet, Key Characteristics of TreeSet, Common Operations for HashSet and TreeSet and more along with examples.​​​

What is Sets in Java

  • A Set is an interface that extends the Collection interface in Java.
  • It represents a collection of unique elements, ensuring that no duplicate elements are allowed.
  • Two commonly used implementations of the Set interface are HashSet and TreeSet.

HashSet

  • A HashSet in Java is a collection that implements the Set interface from the Java Collections Framework.
  • It stores unique elements and does not allow duplicates.
  • HashSet uses a hash table for storage, which ensures fast access and retrieval times.

Key Characteristics of HashSet

  • Uniqueness: Stores only unique elements.
  • Hash Table: Utilizes a hash table for storage, offering constant-time performance (O(1)) for basic operations like add, remove, and contains.
  • Null Elements: Allows one null element.
  • Order: Does not maintain any order of elements.

Declaration and Initialization

Declaration

To use HashSet, import it from the java.util package and declare it:

import java.util.HashSet;

public class HashSetExample {
    public static void main(String[] args) {
        HashSet<String> names;
    }
}

Initialization

Initialize a HashSet using the new keyword:

names = new HashSet<>();

Combine declaration and initialization:

HashSet<String> names = new HashSet<>();

Adding and Retrieving Elements

Adding Elements

Add elements to HashSet using the add() method:

names.add("Alice");
names.add("Bob");
names.add("Charlie");

Retrieving Elements

Retrieve elements from HashSet using iteration or the contains() method:

if (names.contains("Bob")) {
    System.out.println("Bob is in the HashSet");
}

TreeSet

  • A TreeSet in Java is a collection that implements the SortedSet interface from the Java Collections Framework.
  • It stores unique elements in sorted order.
  • TreeSet uses a balanced tree data structure (specifically, a Red-Black tree) for storage, which maintains elements in ascending order.

Key Characteristics of TreeSet

  • Sorted Order: Maintains elements in sorted (ascending) order.
  • Balanced Tree: Uses a Red-Black tree for storage, providing O(log n) time complexity for basic operations like add, remove, and contains.
  • Null Elements: Does not allow null elements (throws NullPointerException).
  • Performance: Offers efficient operations for accessing and manipulating elements in sorted order.

Declaration and Initialization

Declaration

To use TreeSet, import it from the java.util package and declare it:

import java.util.TreeSet;

public class TreeSetExample {
    public static void main(String[] args) {
        TreeSet<String> names;
    }
}

Initialization

Initialize a TreeSet using the new keyword:

names = new TreeSet<>();

Combine declaration and initialization:

TreeSet<String> names = new TreeSet<>();

Adding and Retrieving Elements

Adding Elements

Add elements to TreeSet using the add() method:

names.add("Alice");
names.add("Bob");
names.add("Charlie");

Retrieving Elements

Retrieve elements from TreeSet using iteration or methods like first(), last(), lower(), higher(), etc.

String firstElement = names.first();
String lastElement = names.last();

Common Operations for HashSet and TreeSet

Iterating Through Elements:

for (String name : names) {
    System.out.println(name);
}

Removing Elements:

names.remove("Bob");

Checking Set Size:

int setSize = names.size();

Checking Existence

boolean isCharliePresent = names.contains("Charlie");
System.out.println("Is Charlie present? " + isCharliePresent);

Key Differences

FeatureHashSetTreeSet
ImplementationUses a hash tableUses a Red-Black tree
OrderingDoes not maintain any orderMaintains elements in sorted (ascending) order
Null ElementsAllows one null elementDoes not allow null elements (throws NullPointerException)
PerformanceOffers constant-time performance (O(1))Offers O(log n) time complexity for basic operations
SortingDoes not sort elementsKeeps elements sorted
IteratorIterates in arbitrary orderIterates in ascending order
Use CasesSuitable for general-purpose storageSuitable when elements need to be stored in sorted order

Example: Working with Names in a HashSet:

Let’s create a simple program that works with names stored in a HashSet:

import java.util.HashSet;

public class HashSetExample {
    public static void main(String[] args) {
        // Create a HashSet to store names
        HashSet<String> names = new HashSet<>();

        // Adding elements to the HashSet
        names.add("Alice");
        names.add("Bob");
        names.add("Charlie");

        // Adding a duplicate element (will be ignored)
        names.add("Alice");

        // Displaying the HashSet
        System.out.println("HashSet: " + names);

        // Checking if an element exists
        if (names.contains("Bob")) {
            System.out.println("Bob is in the HashSet");
        }

        // Removing an element
        names.remove("Charlie");

        // Iterating through the HashSet
        System.out.println("Iterating through HashSet:");
        for (String name : names) {
            System.out.println(name);
        }
    }
}

Output

HashSet: [Bob, Alice, Charlie]
Bob is in the HashSet
Iterating through HashSet:
Bob
Alice

Example using TreeSet

import java.util.TreeSet;

public class TreeSetExample {
    public static void main(String[] args) {
        // Create a TreeSet to store integers
        TreeSet<Integer> numbers = new TreeSet<>();

        // Adding elements to the TreeSet
        numbers.add(5);
        numbers.add(2);
        numbers.add(8);
        numbers.add(1);

        // Adding a duplicate element (will be ignored)
        numbers.add(2);

        // Displaying the TreeSet (elements will be sorted automatically)
        System.out.println("TreeSet: " + numbers);

        // Checking if an element exists
        if (numbers.contains(8)) {
            System.out.println("8 is in the TreeSet");
        }

        // Removing an element
        numbers.remove(1);

        // Iterating through the TreeSet
        System.out.println("Iterating through TreeSet:");
        for (Integer num : numbers) {
            System.out.println(num);
        }
    }
}

Output

TreeSet: [1, 2, 5, 8]
8 is in the TreeSet
Iterating through TreeSet:
2
5
8

related posts

Leave a Comment

Enable Notifications OK No thanks