Set Implementation Internally in Java
Each and every element in the set is unique . So that there is no duplicate element in set .
what happens internally when you pass duplicate elements in the add() method of the Set object , It will return false and do not add to the HashSet , as the element is already present .So far so good .
But the main problem arises that how it returns false . So here is the answer
When you open the HashSet implementation of the add() method in Java Apis that is rt.jar , you will find the following code in it
So , we are achieving uniqueness in Set,internally in java through HashMap . Whenever you create an object of HashSet it will create an object of HashMap as you can see in the italic lines in the above code .
The main point to notice in above code is that put (key,value) will return
1. null , if key is unique and added to the map
2. Old Value of the key , if key is duplicate
So , in HashSet add() method , we check the return value of map.put(key,value) method with null value
i.e.
public boolean add(E e) {
return map.put(e, PRESENT)==null;
}
So , if map.put(key,value) returns null ,then
map.put(e, PRESENT)==null will return true and element is added to the HashSet .
So , if map.put(key,value) returns old value of the key ,then
map.put(e, PRESENT)==null will return false and element is not added to the HashSet .
Each and every element in the set is unique . So that there is no duplicate element in set .
what happens internally when you pass duplicate elements in the add() method of the Set object , It will return false and do not add to the HashSet , as the element is already present .So far so good .
But the main problem arises that how it returns false . So here is the answer
When you open the HashSet implementation of the add() method in Java Apis that is rt.jar , you will find the following code in it
public class HashSet<E> extends AbstractSet<E> implements Set<E>, Cloneable, java.io.Serializable { private transient HashMap<E,Object> 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 }
So , we are achieving uniqueness in Set,internally in java through HashMap . Whenever you create an object of HashSet it will create an object of HashMap as you can see in the italic lines in the above code .
The main point to notice in above code is that put (key,value) will return
1. null , if key is unique and added to the map
2. Old Value of the key , if key is duplicate
So , in HashSet add() method , we check the return value of map.put(key,value) method with null value
i.e.
public boolean add(E e) {
return map.put(e, PRESENT)==null;
}
So , if map.put(key,value) returns null ,then
map.put(e, PRESENT)==null will return true and element is added to the HashSet .
So , if map.put(key,value) returns old value of the key ,then
map.put(e, PRESENT)==null will return false and element is not added to the HashSet .
No comments:
Post a Comment