The Set
A set is not implicitly ordered.
A set contains no duplicates.
A set may contain a single null element.
Set Methods
The Set Interface defines the basic method add, remove, and clear, to maintain the item in the set.
We can also check if a specific item is in the set using the contains methods.
Interestingly enough, there is no way to retrieve an item from a set.
You can check if something exists, using contains and you can iterate over all the elements in the set, but attempting to get the 10th element.
for example from a set is not possible, with a single method.
How HashSet Works Internally
HashSet uses a hash table for storing the elements. It uses a hashmap to store elements as keys, with dummy values. When you add an element to a HashSet the element is hashed using the hashCode() method, and the resulting hash code is used to determine the bucket location in the hash table where the element will be stored.
If another element is hashes to the same bucket (collision), HashSet handles it by a linked list or a binary tree (depending on java version) to store multiple elements with the same hash code in the same bucket.
public static void main(String[] args) {
String aText = "Hello";
String bText = "Hello";
String cText = String.join("l", "He", "lo");
String dText = "He".concat("llo");
String eText = "hello";
//creating a list of hellos
List<String> hellos = Arrays.asList(aText, bText, cText, dText, eText);
//iterating through all the element to get the hash code of particular element
hellos.forEach(s -> System.out.println(s + ": " + s.hashCode()));
// output
// Hello: 69609650
// Hello: 69609650
// Hello: 69609650
// Hello: 69609650
// hello: 99162322
//creating a set of hellos
Set<String> mySet = new HashSet<>(hellos);
System.out.println("mySet " + mySet);//mySet [Hello, hello]
System.out.println("mySet " + mySet.size());//mySet 2
//lopping through the set
for (String setValue : mySet) {
System.out.print(setValue + ": ");
//loop for list of hellos
for (int i = 0; i < hellos.size(); i++) {
//checking if elements are equal
if (setValue == hellos.get(i)) {
System.out.print(i + ", ");
}
}
System.out.println("");
}
// Hello: 0, 1,
// hello: 4,
}