Skip to content
geeksforgeeks
  • Tutorials
    • Python
    • Java
    • Data Structures & Algorithms
    • ML & Data Science
    • Interview Corner
    • Programming Languages
    • Web Development
    • CS Subjects
    • DevOps And Linux
    • School Learning
    • Practice Coding Problems
  • Courses
    • DSA to Development
    • Get IBM Certification
    • Newly Launched!
      • Master Django Framework
      • Become AWS Certified
    • For Working Professionals
      • Interview 101: DSA & System Design
      • Data Science Training Program
      • JAVA Backend Development (Live)
      • DevOps Engineering (LIVE)
      • Data Structures & Algorithms in Python
    • For Students
      • Placement Preparation Course
      • Data Science (Live)
      • Data Structure & Algorithm-Self Paced (C++/JAVA)
      • Master Competitive Programming (Live)
      • Full Stack Development with React & Node JS (Live)
    • Full Stack Development
    • Data Science Program
    • All Courses
  • Java Arrays
  • Java Strings
  • Java OOPs
  • Java Collection
  • Java 8 Tutorial
  • Java Multithreading
  • Java Exception Handling
  • Java Programs
  • Java Project
  • Java Collections Interview
  • Java Interview Questions
  • Java MCQs
  • Spring
  • Spring MVC
  • Spring Boot
  • Hibernate
Open In App
Next Article:
Java LinkedHashSet
Next article icon

Java HashSet

Last Updated : 12 Mar, 2025
Comments
Improve
Suggest changes
Like Article
Like
Report

HashSet in Java implements the Set interface of Collections Framework. It is used to store the unique elements and it doesn't maintain any specific order of elements.

  • Can store the Null values.
  • Uses HashMap (implementation of hash table data structure) internally.
  • Also implements Serializable and Cloneable interfaces.
  • HashSet is not thread-safe. So to make it thread-safe, synchronization is needed externally.

Example:

Java
// Java program to show the use of HashSet import java.util.*;  class GFG  {     public static void main(String[] args)      {         // Instantiate an object of HashSet         HashSet<Integer> hs = new HashSet<>();        	// Adding elements          hs.add(1);         hs.add(2);         hs.add(1);          // Printing the Size and Element of HashSet         System.out.println("HashSet Size: " + hs.size());         System.out.println("Elements in HashSet: " + hs);     } } 

Output
HashSet Size: 2 Elements in HashSet: [1, 2] 

Hierarchy of HashSet


Declaring a HashSet

public class HashSet<E> extends AbstractSet<E> implements Set<E>, Cloneable, Serializable

where E is the type of elements stored in a HashSet.

Before storing an Object, HashSet checks whether there is an existing entry using hashCode() and equals() methods. In the above example, two lists are considered equal if they have the same elements in the same order. When you invoke the hashCode()  method on the two lists, they both would give the same hash since they are equal. 

Internal Working of a HashSet

All the classes of the Set interface are internally backed up by Map. HashSet uses HashMap for storing its object internally. You must be wondering that to enter a value in HashMap we need a key-value pair, but in HashSet, we are passing only one value. 

Storage in HashMap: Actually the value we insert in HashSet acts as a key to the map Object and for its value, java uses a constant variable. So in the key-value pair, all the values will be the same.

To know more about the topic refer to Internal Working of HashSet.

Constructors of HashSet class

To create a HashSet, we need to create an object of the HashSet class. The HashSet class consists of various constructors that allow the possible creation of the HashSet. The following are the constructors available in this class.

Constructor

Description

Syntax

HashSet()

This constructor is used to build an empty HashSet object in which the default initial capacity is 16 and the default load factor is 0.75.

HashSet<E> hs = new HashSet<E>();

HashSet(int initialCapacity)

This constructor is used to build an empty HashSet object in which the initialCapacity is specified at the time of object creation.
Here, the default loadFactor remains 0.75.

HashSet<E> hs = new HashSet<E>(int initialCapacity);

HashSet(int initialCapacity, float loadFactor)

This constructor is used to build an empty HashSet object in which the initialCapacity and loadFactor are specified at the time of object creation.

HashSet<E> hs = new HashSet<E>(int initialCapacity, float loadFactor);

HashSet(Collection)

This constructor is used to build a HashSet object containing all the elements from the given collection. In short, this constructor is used when any conversion is needed from any Collection object to the HashSet object.

HashSet<E> hs = new HashSet<E>(Collection C);

Methods in Java HashSet

Method

Description

add(E e)Used to add the specified element if it is not present, if it is present then return false.
clear()Used to remove all the elements from the set.
contains(Object o)Used to return true if an element is present in a set.
remove(Object o)Used to remove the element if it is present in set.
iterator()Used to return an iterator over the element in the set.
isEmpty()Used to check whether the set is empty or not. Returns true for empty and false for a non-empty condition for set.
size()Used to return the size of the set.
clone()Used to create a shallow copy of the set.

Performing Various Operations on HashSet

Let’s see how to perform a few frequently used operations on the HashSet.

1. Adding Elements in HashSet

To add an element to the HashSet, we can use the add() method. However, the insertion order is not retained in the HashSet. We need to keep a note that duplicate elements are not allowed and all duplicate elements are ignored.

Example:

Java
// Java program to Adding Elements to HashSet import java.util.*;  class GFG  {     public static void main(String[] args)     {           // Creating an empty HashSet of string entities         HashSet<String> hs = new HashSet<String>();          // Adding elements using add() method         hs.add("Geek");         hs.add("For");         hs.add("Geeks");          // Printing all string entries inside the Set         System.out.println("HashSet : " + hs);     } } 

Output
HashSet : [Geek, For, Geeks] 

2. Removing Elements in HashSet

The values can be removed from the HashSet using the remove() method.

Example:

Java
// Removing Elements in HashSet import java.util.*;  class GFG  {     public static void main(String[] args)     {                HashSet<String> hs = new HashSet<String>();          // Adding elements to above Set         // using add() method         hs.add("Geek");         hs.add("For");         hs.add("Geeks");         hs.add("A");         hs.add("B");         hs.add("Z");          // Printing the elements of HashSet elements         System.out.println("HashSet : " + hs);          // Removing the element B         hs.remove("B");          // Printing the updated HashSet elements         System.out.println("HashSet after removing element : " + hs);          // Returns false if the element is not present         System.out.println("B exists in Set : " + hs.remove("B"));     } } 

Output
HashSet : [A, B, Geek, For, Geeks, Z] HashSet after removing element [A, Geek, For, Geeks, Z] B exists in Set : false 

3. Iterating through the HashSet

Iterate through the elements of HashSet using the iterator() method. Also, the most famous one is to use the enhanced for loop. 

Example:

Java
// Iterating through the HashSet import java.util.HashSet; import java.util.Iterator;  public class GFG  {     public static void main(String[] args)      {                // Create a HashSet of Strings         HashSet<String> hs = new HashSet<>();          // Add elements to the HashSet         hs.add("A");         hs.add("B");         hs.add("Geeks");         hs.add("For");         hs.add("Geeks");         hs.add("Z");          // Using iterator() method to iterate       	// Over the HashSet         System.out.print("Using iterator : ");         Iterator<String> iterator = hs.iterator();              	// Traversing HashSet         while (iterator.hasNext())             System.out.print(iterator.next() + ", ");          System.out.println();          // Using enhanced for loop to iterate       	// Over the HashSet         System.out.print("Using enhanced for loop : ");         for (String element : hs)             System.out.print(element + " , ");            } } 

Output
Using iterator : A, B, Geeks, For, Z,  Using enhanced for loop : A , B , Geeks , For , Z , 

DSA Problems On HashSet

  1. Union of Two Arrays
  2. Intersection of Two Sorted Arrays
  3. Distinct Elements in an Array
  4. Check for Disjoint Arrays or Sets
  5. Check if an Array is Subset of Other
  6. Duplicate within K Distance in an Array
  7. 2 Sum - Check for Pair with Target Sum
  8. Only Repeating Element From 1 To n-1
  9. Longest Consecutive Sequence
  10. Smallest Subarray with k Distinct Numbers

Performance of HashSet

HashSet extends Abstract Set<E> class and implements Set<E>, Cloneable, and Serializable interfaces where E is the type of elements maintained by this set. The directly known subclass of HashSet is LinkedHashSet.

Now for the maintenance of constant time performance, iterating over HashSet requires time proportional to the sum of the HashSet instance's size (the number of elements) plus the "capacity" of the backing HashMap instance (the number of buckets). Thus, it's very important not to set the initial capacity too high (or the load factor too low) if iteration performance is important. 

  • Initial Capacity: The initial capacity means the number of buckets when the hashtable (HashMap internally uses hashtable data structure) is created. The number of buckets will be automatically increased if the current size gets full. 
     
  • Load Factor: The load factor is a measure of how full the HashSet is allowed to get before its capacity is automatically increased. When the number of entries in the hash table exceeds the product of the load factor and the current capacity, the hash table is rehashed (that is, internal data structures are rebuilt) so that the hash table has approximately twice the number of buckets.
     
                                     Number of stored elements in the table
Load Factor = -----------------------------------------
                   Size of the hash table 

Example: If internal capacity is 16 and the load factor is 0.75 then the number of buckets will automatically get increased when the table has 12 elements in it.

Effect on Performance

Load factor and initial capacity are two main factors that affect the performance of HashSet operations. A load factor of 0.75 provides very effective performance with respect to time and space complexity. If we increase the load factor value more than that then memory overhead will be reduced (because it will decrease internal rebuilding operation) but, it will affect the add and search operation in the hashtable. To reduce the rehashing operation we should choose initial capacity wisely. If the initial capacity is greater than the maximum number of entries divided by the load factor, no rehash operation will ever occur.

Note: The implementation in a HashSet is not synchronized, in the sense that if multiple threads access a hash set concurrently, and at least one of the threads modifies the set, it must be synchronized externally. This is typically accomplished by synchronizing on some object that naturally encapsulates the set. If no such object exists, the set should be "wrapped" using the Collections.synchronizedSet method. This is best done at creation time, to prevent accidental unsynchronized access to the set as shown below:

Set s = Collections.synchronizedSet(new HashSet(...));

Inherited Methods

Classes and Interfaces

Method

Description

java.util.AbstractSet


equals()Used to verify the equality of an Object with a HashSet and compare them. The list returns true only if both HashSet contains the same elements, irrespective of order.
hashcode()Returns the hash code value for this set.
removeAll(collection)This method is used to remove all the elements from the collection which are present in the set. This method returns true if this set changes as a result of the call.

java.util.AbstractCollection

addAll(collection)

This method is used to append all of the elements from the mentioned collection to the existing set.
The elements are added randomly without following any specific order.

containsAll(collection)

This method is used to check whether the set contains all the elements present in the given collection or not.
This method returns true if the set contains all the elements and returns false if any of the elements are missing.

retainAll(collection)This method is used to retain all the elements from the set which are mentioned in the given collection. This method returns true if this set changed as a result of the call.
toArray()This method is used to form an array of the same elements as that of the Set.
toString()The toString() method of Java HashSet is used to return a string representation of the elements of the HashSet Collection.

java.util.Collection

parallelStream()Returns a possibly parallel Stream with this collection as its source.
removeIf?(Predicate<? super E> filter)Removes all of the elements of this collection that satisfy the given predicate.
stream()Returns a sequential Stream with this collection as its source.
toArray?(IntFunction<T[]> generator)Returns an array containing all of the elements in this collection, using the provided generator function to allocate the returned array.

java.lang.Iterable

 forEach?(Consumer<? super T> action)Performs the given action for each element of the Iterable until all elements have been processed or the action throws an exception.

java.util.Set

addAll?(Collection<? extends E> c)Adds all of the elements in the specified collection to this set if they're not already present (optional operation).
containsAll?(Collection<?> c)Returns true if this set contains all of the elements of the specified collection.
equals?(Object o)Compares the specified object with this set for equality.
hashCode()Returns the hash code value for this set.
removeAll?(Collection<?> c)Removes from this set all of its elements that are contained in the specified collection (optional operation).
retainAll?(Collection<?> c)Retains only the elements in this set that are contained in the specified collection (optional operation).
toArray()Returns an array containing all of the elements in this set.
toArray?(T[] a)Returns an array containing all of the elements in this set; the runtime type of the returned array is that of the specified array.

Next Article
Java LinkedHashSet

D

Dharmesh Singh
Improve
Article Tags :
  • Java
  • Java-Collections
  • Java - util package
  • java-hashset
Practice Tags :
  • Java
  • Java-Collections

Similar Reads

    Java Collection Tutorial
    Java Collection Framework is unlikely any group of individual objects which are represented as a single unit be it of any type is known as the collection of objects. Earlier in Java, there was no such thing defined which holds true for it so there arises a need in the next versions of any such conce
    15+ min read
    Collection Interface in Java
    The Collection interface in Java is a core member of the Java Collections Framework located in the java.util package. It is one of the root interfaces of the Java Collection Hierarchy. The Collection interface is not directly implemented by any class. Instead, it is implemented indirectly through it
    6 min read

    List Interface

    Java List Interface
    The List Interface in Java extends the Collection Interface and is a part of the java.util package. It is used to store the ordered collections of elements. In a Java List, we can organize and manage the data sequentially. Key Features:Maintained the order of elements in which they are added.Allows
    15+ min read
    ArrayList in Java
    Java ArrayList is a part of the collections framework and it is a class of java.util package. It provides us with dynamic-sized arrays in Java. The main advantage of ArrayList is that, unlike normal arrays, we don't need to mention the size when creating ArrayList. It automatically adjusts its capac
    9 min read
    LinkedList in Java
    Linked List is a part of the Collection framework present in java.util package. This class is an implementation of the LinkedList data structure, which is a linear data structure where the elements are not stored in contiguous locations, and every element is a separate object with a data part and an
    12 min read
    Vector Class in Java
    The Vector class in Java implements a growable array of objects. Vectors were legacy classes, but now it is fully compatible with collections. It comes under java.util package and implement the List interface.Key Features of Vector:It expands as elements are added.Vector class is synchronized in nat
    12 min read
    Stack Class in Java
    The Java Collection framework provides a Stack class, which implements a Stack data structure. The class is based on the basic principle of LIFO (last-in-first-out). Besides the basic push and pop operations, the class also provides three more functions, such as empty, search, and peek. The Stack cl
    11 min read
    AbstractList in Java with Examples
    The AbstractList class in Java is a part of the Java Collection Framework and implements the Collection interface and the AbstractCollection class. AbstractList class provides a skeletal implementation of the List interface to minimize the effort required to implement this interface backed by a Rand
    7 min read
    AbstractSequentialList in Java with Examples
    The AbstractSequentialList class in Java is a part of the Java Collection Framework and implements the Collection interface and the AbstractCollection class. This class provides a skeletal implementation of the List interface to minimize the effort required to implement this interface backed by a "s
    7 min read

    Set Interface

    Set in Java
    The Set Interface is present in java.util package and extends the Collection interface. It is an unordered collection of objects in which duplicate values cannot be stored. It is an interface that implements the mathematical set. This interface adds a feature that restricts the insertion of duplicat
    14 min read
    Java HashSet
    HashSet in Java implements the Set interface of Collections Framework. It is used to store the unique elements and it doesn't maintain any specific order of elements. Can store the Null values.Uses HashMap (implementation of hash table data structure) internally.Also implements Serializable and Clon
    12 min read
    Java LinkedHashSet
    LinkedHashSet in Java implements the Set interface of the Collection Framework. It combines the functionality of a HashSet with a LinkedList to maintain the insertion order of elements. Stores unique elements only.Maintains insertion order.Provides faster iteration compared to HashSet.Allows null el
    8 min read
    EnumSet in Java
    In Java, the EnumSet is a specialized set implementation for use with enum types. It is a part of java.util package and provides a highly optimized set for storing enum constants. The EnumSet is one of the specialized implementations of the Set interface for use with the enumeration type.It extends
    9 min read
    SortedSet Interface in Java with Examples
    The SortedSet interface is present in java.util package extends the Set interface present in the collection framework. It is an interface that implements the mathematical set. This interface contains the methods inherited from the Set interface and adds a feature that stores all the elements in this
    8 min read
    TreeSet in Java
    TreeSet is one of the most important implementations of the SortedSet interface in Java that uses a Tree(red - black tree) for storage. The ordering of the elements is maintained by a set using their natural ordering whether or not an explicit comparator is provided. This must be consistent with equ
    13 min read
    NavigableSet in Java
    In Java, the NavigableSet is a subtype of the SortedSet interface. It allows us to perform various operations like getting the closest matches for a given element, descending order iteration, and others. It provides methods to navigate through the elements in the set.For Example, The NavigableSet in
    9 min read

    Queue Interface

    Queue Interface In Java
    The Queue Interface is a part of java.util package and extends the Collection interface. It stores and processes the data in order means elements are inserted at the end and removed from the front. Key Features:Most implementations, like PriorityQueue, do not allow null elements.Implementation Class
    11 min read
    PriorityQueue in Java
    The PriorityQueue class in Java is part of the java.util package. It implements a priority heap-based queue that processes elements based on their priority rather than the FIFO (First-In-First-Out) concept of a Queue.Key Points:The PriorityQueue is based on the Priority Heap. The elements of the pri
    9 min read
    ArrayBlockingQueue Class in Java
    In Java, the ArrayBlockingQueue class is part of the java.util.concurrent package and implements the BlockingQueue interface. It is a thread-safe, bounded queue that helps manage producer-consumer scenarios by blocking threads when the queue is full or empty.The queue has a fixed size, specified dur
    8 min read

    Deque Interface

    Deque Interface in Java
    Deque Interface present in java.util package is a subtype of the queue interface. The Deque is related to the double-ended queue that supports adding or removing elements from either end of the data structure. It can either be used as a queue(first-in-first-out/FIFO) or as a stack(last-in-first-out/
    9 min read
    ArrayDeque in Java
    In Java, the ArrayDeque is a resizable array implementation of the Deque interface, which stands for double-ended queue. It allows elements to be added or removed from both ends efficiently. It can be used as a stack (LIFO) or a queue (FIFO).ArrayDeque grows dynamically.It generally provides faster
    10 min read

    Map Interface

    Map Interface in Java
    In Java, the Map Interface is part of the java.util package and represents a mapping between a key and a value. The Java Map interface is not a subtype of the Collections interface. So, it behaves differently from the rest of the collection types.Key Features:No Duplicates in Keys: Keys should be un
    11 min read
    Hashtable in Java
    Hashtable class, introduced as part of the Java Collections framework, implements a hash table that maps keys to values. Any non-null object can be used as a key or as a value. To successfully store and retrieve objects from a hashtable, the objects used as keys must implement the hashCode method an
    12 min read
    HashMap in Java
    In Java, HashMap is part of the Java Collections Framework and is found in the java.util package. It provides the basic implementation of the Map interface in Java. HashMap stores data in (key, value) pairs. Each key is associated with a value, and you can access the value by using the corresponding
    15+ min read
    Java LinkedHashMap
    LinkedHashMap in Java implements the Map interface of the Collections Framework. It stores key-value pairs while maintaining the insertion order of the entries. It maintains the order in which elements are added.Stores unique key-value pairs.Maintains insertion order.Allows one null key and multiple
    7 min read
    SortedMap Interface in Java
    SortedMap is an interface in the collection framework that is a part of java.util package and extends the Map interface. It represents a map that maintains its keys in a sorted order. The keys in a SortedMap are sorted according to their natural ordering or by a Comparator provided at the time of ma
    10 min read
    TreeMap in Java
    TreeMap is a part of the Java Collection Framework. It implements the Map and NavigableMap interface and extends the AbstractMap class. It stores key-value pairs in a sorted order based on the natural ordering of keys or a custom Comparator. It uses a Red-Black Tree for efficient operations (add, re
    11 min read
geeksforgeeks-footer-logo
Corporate & Communications Address:
A-143, 7th Floor, Sovereign Corporate Tower, Sector- 136, Noida, Uttar Pradesh (201305)
Registered Address:
K 061, Tower K, Gulshan Vivante Apartment, Sector 137, Noida, Gautam Buddh Nagar, Uttar Pradesh, 201305
GFG App on Play Store GFG App on App Store
Advertise with us
  • Company
  • About Us
  • Legal
  • Privacy Policy
  • In Media
  • Contact Us
  • Advertise with us
  • GFG Corporate Solution
  • Placement Training Program
  • Languages
  • Python
  • Java
  • C++
  • PHP
  • GoLang
  • SQL
  • R Language
  • Android Tutorial
  • Tutorials Archive
  • DSA
  • Data Structures
  • Algorithms
  • DSA for Beginners
  • Basic DSA Problems
  • DSA Roadmap
  • Top 100 DSA Interview Problems
  • DSA Roadmap by Sandeep Jain
  • All Cheat Sheets
  • Data Science & ML
  • Data Science With Python
  • Data Science For Beginner
  • Machine Learning
  • ML Maths
  • Data Visualisation
  • Pandas
  • NumPy
  • NLP
  • Deep Learning
  • Web Technologies
  • HTML
  • CSS
  • JavaScript
  • TypeScript
  • ReactJS
  • NextJS
  • Bootstrap
  • Web Design
  • Python Tutorial
  • Python Programming Examples
  • Python Projects
  • Python Tkinter
  • Python Web Scraping
  • OpenCV Tutorial
  • Python Interview Question
  • Django
  • Computer Science
  • Operating Systems
  • Computer Network
  • Database Management System
  • Software Engineering
  • Digital Logic Design
  • Engineering Maths
  • Software Development
  • Software Testing
  • DevOps
  • Git
  • Linux
  • AWS
  • Docker
  • Kubernetes
  • Azure
  • GCP
  • DevOps Roadmap
  • System Design
  • High Level Design
  • Low Level Design
  • UML Diagrams
  • Interview Guide
  • Design Patterns
  • OOAD
  • System Design Bootcamp
  • Interview Questions
  • Inteview Preparation
  • Competitive Programming
  • Top DS or Algo for CP
  • Company-Wise Recruitment Process
  • Company-Wise Preparation
  • Aptitude Preparation
  • Puzzles
  • School Subjects
  • Mathematics
  • Physics
  • Chemistry
  • Biology
  • Social Science
  • English Grammar
  • Commerce
  • World GK
  • GeeksforGeeks Videos
  • DSA
  • Python
  • Java
  • C++
  • Web Development
  • Data Science
  • CS Subjects
@GeeksforGeeks, Sanchhaya Education Private Limited, All rights reserved
We use cookies to ensure you have the best browsing experience on our website. By using our site, you acknowledge that you have read and understood our Cookie Policy & Privacy Policy
Lightbox
Improvement
Suggest Changes
Help us improve. Share your suggestions to enhance the article. Contribute your expertise and make a difference in the GeeksforGeeks portal.
geeksforgeeks-suggest-icon
Create Improvement
Enhance the article with your expertise. Contribute to the GeeksforGeeks community and help create better learning resources for all.
geeksforgeeks-improvement-icon
Suggest Changes
min 4 words, max Words Limit:1000

Thank You!

Your suggestions are valuable to us.

What kind of Experience do you want to share?

Interview Experiences
Admission Experiences
Career Journeys
Work Experiences
Campus Experiences
Competitive Exam Experiences