In this guide, we will learn about the Set interface, its methods with examples.
Important Key Points about the Set Interface
Here are some key points about the Set interface in Java:
Unique Elements:
The Set is a Collection that cannot contain duplicate elements. It models the mathematical set abstraction.
Ordering:
The elements in a Set can be sorted in ascending order by using TreeSet implementation class. HashSet implementation class provides no ordering guarantees. The LinkedHashSet implementation class maintains the insertion order.
Null Elements:
All Set implementations permit, at most, one null element, if they permit null elements at all.
Methods:
The Set interface includes all the methods of the Collection interface and adds a stronger contract on the behavior of the equals and hashCode operations, allowing Set instances to be compared meaningfully even if their implementation types differ.
Subinterfaces and Implementations:
The commonly used classes that implement the Set interface are HashSet, LinkedHashSet, and TreeSet.
No Position Access:
Unlike the List interface, the Set interface doesn't provide any methods to access the element by an index as Set doesn't maintain any fixed order.
Use-cases:
The Set is useful when you want to prevent duplicate values and do not care about the order of elements.
Equality:
Two Set objects are considered equal if they contain the same elements, regardless of the order.
Thread Safety:
None of the Set implementations in the Java Collection Framework are thread-safe. But you can make them thread-safe using Collections.synchronizedSet() and CopyOnWriteArraySet.
Remember, you cannot instantiate Set directly as it is an interface. You need to instantiate a class that implements the Set interface. There are three general-purpose Set implementations: HashSet, TreeSet, and LinkedHashSet.
Set Interface Hierarchy Diagram
Set Interface APIs/Methods
Below are the important Set interface methods with descriptions:
- boolean add(E e) - This method adds the specified element to this set if it is not already present (optional operation).
- boolean addAll(Collection<? extends E> c) - This method adds all of the elements in the specified collection to this set if they're not already present (optional operation).
- _void clear() _- This method removes all of the elements from this set (optional operation).
- boolean contains(Object o) - This method returns true if this set contains the specified element.
- boolean containsAll(Collection<?> c) - This method returns true if this set contains all of the elements of the specified collection.
- boolean equals(Object o) - This method compares the specified object with this set for equality.
- int hashCode() - This method returns the hash code value for this set.
- boolean isEmpty() - This method returns true if this set contains no elements.
- Iterator iterator() - This method returns an iterator over the elements in this set.
- boolean remove(Object o) - This method removes the specified element from this set if it is present (optional operation).
- boolean removeAll(Collection<?> c) - This method removes from this set all of its elements that are contained in the specified collection (optional operation).
- boolean retainAll(Collection<?> c) - This method retains only the elements in this set that are contained in the specified collection (optional operation).
- int size() - This method returns the number of elements in this set (its cardinality).
- default Spliterator spliterator() - This method creates a Spliterator over the elements in this set.
Example 1: Set Interface with Its HashSet Implementation Class
import java.util.HashSet;
import java.util.Set;
public class CreateHashSetExample {
public static void main(String[] args) {
// Creating a HashSet
Set<String> daysOfWeek = new HashSet<>();
// Adding new elements to the HashSet
daysOfWeek.add("Monday");
daysOfWeek.add("Tuesday");
daysOfWeek.add("Wednesday");
daysOfWeek.add("Thursday");
daysOfWeek.add("Friday");
daysOfWeek.add("Saturday");
daysOfWeek.add("Sunday");
// Adding duplicate elements will be ignored
daysOfWeek.add("Monday");
System.out.println(daysOfWeek);
}
}
Output:
[Monday, Thursday, Friday, Sunday, Wednesday, Tuesday, Saturday]
Example 2: Set Interface with Its LinkedHashSet Implementation Class
// Creating a HashSet
LinkedHashSet<String> daysOfWeek = new LinkedHashSet<>();
// Adding new elements to the HashSet
daysOfWeek.add("Monday");
daysOfWeek.add("Tuesday");
daysOfWeek.add("Wednesday");
daysOfWeek.add("Thursday");
daysOfWeek.add("Friday");
daysOfWeek.add("Saturday");
daysOfWeek.add("Sunday");
// Adding duplicate elements will be ignored
daysOfWeek.add("Monday");
System.out.println(daysOfWeek);
Output:
[Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday]
Read more about LinkedHashSet class with examples at Guide to LinkedHashSet Class.
Example 3: Set Interface with Its TreeSet Implementation Class
// Creating a TreeSet
TreeSet<String> fruits = new TreeSet<>();
// Adding new elements to a TreeSet
fruits.add("Banana");
fruits.add("Apple");
fruits.add("Pineapple");
fruits.add("Orange");
System.out.println("Fruits Set : " + fruits);
// Duplicate elements are ignored
fruits.add("Apple");
System.out.println("After adding duplicate element \"Apple\" : " + fruits);
// This will be allowed because it's in lowercase.
fruits.add("banana");
System.out.println("After adding \"banana\" : " + fruits);
Output:
Fruits Set : [Apple, Banana, Orange, Pineapple]
After adding duplicate element "Apple" : [Apple, Banana, Orange, Pineapple]
After adding "banana" : [Apple, Banana, Orange, Pineapple, banana]
Note that in this example, duplicate elements are ignored.
Set Interface Implementation Classes
There are three general-purpose Set implementations:Below are the special-Purpose Set interface Implementations:
Related Collections Framework Interfaces
- Collections Framework - The Collection Interface
- Collections Framework - The Set Interface
- Collections Framework - The SortedSet Interface
- Collections Framework - The List Interface
- Collections Framework - The Queue Interface
- Collections Framework - The Deque Interface
- Collections Framework - The Map Interface
- Collections Framework - The SortedMap Interface
Comments
Post a Comment
Leave Comment