HashMap vs HashSet is the most frequently asked question during any core java interview and the interview is not said completed until they will not cover the Collection Framework and multi-threading interview and collections are uncompleted without Covering Hash Set and HashMap.
Both HashMap and HashSet are part of the collection framework which allows us to work with a collection of objects. Collection Framework has its own interfaces and implementation classes. Basically, a collection is divided into Set Interface, List, and Queue Interfaces.
All these interfaces have their own property also apart from what they get from a collection like Set allows Collection of objects but forbids duplicate value, List allows duplicate along with indexing. Queue works on the FCFS algorithm.
All these interfaces have their own property also apart from what they get from a collection like Set allows Collection of objects but forbids duplicate value, List allows duplicate along with indexing. Queue works on the FCFS algorithm.
First, we have one look at What HashMap and HashSet are then will go for Differences between HashSet and HashMap
What is HashSet in Java?
HashSet is the implementation of Set Interface which does not allow duplicate value all the methods which are in Collection Framework are also in Set Interface by default but when we are talking about Hash set the main thing is objects which are going to be stored in HashSet must override equals() and hashCode() method so that we can check for equality and no duplicate value is stored in our set.
If we have created our own objects we need to implement hashCode() and equal() in such a manner that will be able to compare objects correctly when storing in a set so that duplicate objects are not stored, if we have not to override this method objects will take default implementation of this method.
If we have created our own objects we need to implement hashCode() and equal() in such a manner that will be able to compare objects correctly when storing in a set so that duplicate objects are not stored, if we have not to override this method objects will take default implementation of this method.
public boolean add(Object o) method is used to add an element in a set which returns false if it’s a duplicate value in case of HashSet otherwise returns true if added successfully.
What is HashMap in Java?
HashMap is an implementation of Map Interface, which maps a key to value. Duplicate keys are not allowed on a map. Basically, the map Interface has two implementation classes HashMap and TreeMap the main difference is TreeMap maintains the order of the objects but HashMap will not.HashMap allows null values and null keys.
The HashMap is not synchronized, but the collection framework provides methods so that we can make them synchronized if multiple threads are going to access our hashmap and one thread structurally changes our map.
public Object put(Object key, Object value) method is used to add an element to the map.
You can read more about HashMap in my article How HashMap works in Java and the Difference between HashMap and hashtable in Java
Difference between HashSet and HashMap in Java
Following are some differences between HashMap and HashSet:
HashMap
|
Hash Set
|
HashMap is an implementation of Map interface
|
HashSet is an implementation of Set Interface
|
HashMap stores data in form of key-value pair
|
HashSet Store only objects
|
Put method is used to add element in map
|
Add method is used to add element is Set
|
In hash map, hashcode value is calculated using key object
|
Here member object is used for calculating hashcode value which can be the same for two objects so the equal () method is used to check for equality if it returns false that means two objects are different.
|
HashMap is faster than HashSet because a unique key is used to access object
|
HashSet is slower than Hashmap
|
Please let me know if you need any other difference between HashSet and HashMap in Java and I will add them here.
How to deal with UnSupportedClassVersionError in Java
Key differences between Vector and ArrayList in java
Key differences between Vector and ArrayList in java
hashCode can be the same for 2 keys in a HashMap so HashMap uses equals.
ReplyDeleteIn Oracle's Java implementation HashSet is only a wrapper around a HashMap.
Yes you are correct, hashcode is used to find the bucket location and then while comparing object it uses equals in place of hashcode. you can read more on this on How HashMap works in Java
ReplyDeleteYou made a good point, but the explanation is horrible!
ReplyDeleteAnother difference between HashMap vs HashSet is that HashMap uses put() method while HashSet uses add() method. HashMap requires two object as key and value , while HashSet only need one object to store. Overall HashSet vs HashMap is comparison between Map and Set Collection type in java.
ReplyDeleteHashSet internally uses HashMap to store Objects.Objects are stored as a key in HashMap and a new dummy Object is placed as value.Since Hashmap does not allow duplicate key,HashSet maintains its uniqueness.
ReplyDeletePlease share your view on Vector Vs synchronized(arrayList)
ReplyDeleteSo there is no concept of key object in HashSet.
ReplyDeleteAm i right?
As we know that HashSet is the wrapper on the HashMap to implement unique set i have below 2 questions
ReplyDelete1. why HashSet does not support get() method like the HashMap?
2. Why HashSet is slower than HashMap?
What is the underlying implementation behind HASH SET & HASH MAP--- the same concept of key value pair, now how can HASH MAP is faster than HASH SET when conceptual implementation behind both collection is same?
ReplyDelete1. Because HashSet does not implement Map interface and Set interface does not declare get() method.
ReplyDeleteAnd there is no key, that you can pass to get() method in case of a set (since all keys are values). If you need to check that specified key exists in the set just use contains() method.
2. It should not be slower, because HashMap does not allow duplicated keys as well. So, performance in worst case (when we need to call to hashcode() and equals() both) is same.
By the way, why I can not edit my comment here?
your articles are awesome..easy to understand.
ReplyDeleteIs there an article where you explain how hashset is implemented using a hashmap?
Also what is the internal working of hashmap, like it is a combination of array and linked list or what actually is a bucket, Map.Entry and all??
Can you please provide me the links to such articles?
1. When Hashset is just a wrapper which uses HashMap, How is it slower than HashMap?
ReplyDelete2. When both classes do not have the same methods, how was this performance comparison done (Again add method of HashSet only delegates the call to a internal HashMap's put method)?
how hashmap works internally in java? could u please explain in detail
ReplyDeleteNice explanation
ReplyDeletePlease add also examples.
ReplyDelete@Unknown, sure, will add some examples sooner.
ReplyDeleteFrom the implementation of HashSet class, we can say that it internally stores the objects into HashMap into keys with a dummy object.
ReplyDeletepublic class HashSet
extends AbstractSet
implements Set, Cloneable, java.io.Serializable
{
private transient HashMap map;
// Dummy value to associate with an Object in the backing Map
private static final Object PRESENT = new Object();
public HashSet() {
map = new HashMap<>();
}
// SOME CODE ,i.e Other methods in Hash Set
public boolean add(E e) {
return map.put(e, PRESENT)==null;
}
// SOME CODE ,i.e Other methods in Hash Set
}