HashSet
HashSet is an implementation class of the Set interface in Java. It is part of the java.util package and is used to store unique elements.
Constructors of HashSet
1. No-Argument Constructor
Example:
HashSet s1 = new HashSet();
Creates an empty HashSet With- Initial capacity = 16
- Default load factor = 0.75
2. Two-Argument Constructor
Example:
HashSet s1 = new HashSet(n, f);
Users can provide initial capacity and load factors based on their requirements.- n--> int type specifies initial capacity.
- f--> float type specifies load factor.
3. Collection-Based Constructor
Example:
HashSet s1 = new HashSet(c1);
- Let's c1 is the collection with n elements.
- Creates a HashSet with the elements of specified elements and with a default load factor of 0.75.
Example:
Store unique records of Students. Students having duplicate IDs should not be allowed.
package quipoin;
public class Student {
int id;
String name;
double marks;
public Student(int id, String name, double marks) {
this.id = id;
this.name = name;
this.marks = marks;
}
@Override
public int hashCode() {
return id;
}
@Override
public boolean equals(Object obj) {
return this.hashCode() == obj.hashCode();
}
@Override
public String toString() {
return "Strudent[ Id=" + id + ",Name=" + name + ",Marks=" + marks + "+]";
}
}
package quipoin;
import java.util.HashSet;
import java.util.Iterator;
public class SetDemo1 {
public static void main(String[] args) {
HashSet<Student> s1 = new HashSet<>();
s1.add(new Student(101, "Ramu", 65.50));
s1.add(new Student(103, "Akash", 69.70));
s1.add(new Student(109, "Vivek", 75.50));
s1.add(new Student(107, "Rakesh", 45.20));
s1.add(new Student(103, "Bharath", 80.00));
// to avoid duplicates we need to override hashCode()
Iterator<Student> i1 = s1.iterator();
System.out.println("-----------------------");
System.out.println("Id\tName\tMarks");
System.out.println("-----------------------");
while (i1.hasNext()) {
Student student = (Student) i1.next();
System.out.println(student.id + "\t" + student.name + "\t" + student.marks);
}
}
}
Output:
--------------------
Id Name Marks
--------------------
101 Ramu 65.5
103 Akash 69.7
107 Rakesh 45.2
109 Vivek 75.5
Explanation:
- In the above example in the Student class, we have overridden the hashcode method based on the Student Id
- The equals method will compare based on the ID and return a Boolean result.
- We can observe the SetDemo1 class we added five students but in the result only four records are visible. Because the ID of the two students is the same, so one duplicate element(object) is eliminated.
Key Point
- HashSet implements two marker Interfaces i.e. Serializable and Cloneable.
- The underlined data structure of HashSet is HashTable.
- The default capacity of HashSet is 16, and it grows based on load factor or fill ratio.
- Internally it gets the HashCode number of e1 and keeps it as a key in the table.
- It doesn't allow duplicate elements based on the Hashcode.
- it does not maintain insertion order.