Java HashMap
Java HashMap extends AbstractMap and implements Map interface. It is the collection of multiple entries where an entry consists of key and value pair. The HashMap can contain only one null key but many null values. It contains unique keys. It maintains no order. The initial capacity is 16, and the load factor is 0.75f. It can have multiple duplicate values.
Structure of HashMap
HashMap consist of the array of node and node is the class which contains 4 fields:- Int Hash.
- K key.
- V value.
- Node next.
Declaration of HashMap
It uses the java.util. HashMap class. The declaration of HashMap is:HashMap<String, String> hm= new HashMap<String, String> ();hm -> it holds the reference of the objects.
Constructors in HashMap:
- HashMap (): This is the default constructor with initial capacity is 16, and the load factor is 0.75f.
import java.util.*; public class HashMapExample { public static void main (String [] args) { HashMap<Integer, String> hma = new HashMap<Integer, String> (); hma.put(1, "C"); hma.put(2, "C++"); hma.put(3, "Java"); System.out.println("Values of hma:" + hma);Output:
Values of hma :{ 1=C, 2=C++, 3=Java}} }
- HashMap (int capacity): It is used to create the HashMap with specified capacity, and load factor is 0.75.
import java.util.*; public class HashMapExample { public static void main (String [] args) { HashMap<Integer, String> hma= new HashMap<Integer, String> (3); hma.put(1, "C"); hma.put(2, "C++"); hma.put(3, "Java"); System.out.println("Values of hma:" + hma); } }Output:
Values of hma: {1=C, 2=C++, 3=Java}
- HashMap (int capacity, float load factor): It is used to create the HashMap with specified capacity and load factor.
import java.util.*; public class HashMapExample { public static void main (String [] args) { HashMap<Integer, String> hma = new HashMap<Integer, String> (3,0.5f); hma.put(1, "C"); hma.put(2, "C++"); hma.put(3, "Java"); System.out.println("Values of hma:" + hma); } }Output:
Values of hma: {1=C, 2=C++, 3=Java}
- HashMap (Map map): It is used to create the HashMap by using the map object.
import java.util.*; public class HashMapExample { public static void main(String [] args) { HashMap<Integer, String> hma = new HashMap<Integer, String>(3, 0.5f); hm.put(1, "C"); hm.put(2, "C++"); hm.put(3, "Java"); System.out.println("Values of hm:” + hm); HashMap<Integer, String> language = new HashMap<Integer, String>(hm); System.out.println("Values of language:" + language); }}Output:
Values of hm :{ 1=C, 2=C++, 3=Java} Values of language :{ 1=C, 2=C++, 3=Java}
Time Complexity of HashMap:
The time complexity of HashMap operations is to provide Constant time. Iteration depends on the capacity of HashMap and the numbers of key-value pairs. It is directly proportional to Capacity + Size.Methods of HashMap:
- clear (): It is used to remove all mapping from the map.
import java.util.*; public class HashMapExample { public static void main(String [] args) { HashMap<Integer, String> hma = new HashMap<Integer, String> (); hm.put(1, "C"); hm.put(2, "C++"); hm.put(3, "Java"); System.out.println("Values of hm:" + hm); hm.clear(); System.out.println("After clear the map:"+ hm); }}Output:
Values of hm: {1=C, 2=C++, 3=Java} After clear the map :{}
- get (Object key): It is used to get the value of a particular key from the map.
import java.util.*; public class HashMapExample { public static void main(String [] args) { HashMap<Integer, String> hma = new HashMap<Integer, String>(); hma.put(1, "C"); hma.put(2, "C++"); hma.put(3, "Java"); System.out.println("Values of hma: " + hma); System.out.println("The value in the map: "+ hma.get(3)); } }Output:
Values of hma: {1=C, 2=C++, 3=Java} The value in the map: Java
- put(object K, object V): It is used to insert the value of the specified key in the Map.
import java.util.*; public class HashMapExample { public static void main (String [] args) { HashMap<Integer, String> hma = new HashMap<Integer, String>(); hma.put (1, "C"); hma.put (2, "C++"); hma.put (3, "Java"); System.out.println ("Values of hma: " + hma); hma.put (4,"Python"); System.out.println ("The value is:"+hma); } }Output:
Values of hm: {1=C, 2=C++, 3=Java} The value is: {1=C, 2=C++, 3=Java, 4=Python}
- containsKey(Object K): It returns true if the specified key is present on the map.
import java.util.*; public class HashMapExample { public static void main(String [] args) { HashMap<Integer, String> hma = new HashMap<Integer, String>(); hma.put(1, "C"); hma.put(2, "C++"); hma.put(3, "Java"); System.out.println("Values of hma: " + hma); System.out.println("Is map contains the key: "+hma.containsKey (2)); System.out.println("Is map contains the key: "+hma.containsKey (8)); } }Output:
Values of hm: {1=C, 2=C++, 3=Java} Is map contains the key: true Is map contains the key: false
- containsValue (object V): It returns true if the specified value is present on the map.
import java.util.*; public class HashMapExample { public static void main (String [] args) { HashMap<Integer, String> hma = new HashMap<Integer, String> (); hma.put (1, "C"); hma.put (2, "C++"); hma.put (3, "Java"); System.out.println ("Values of hma: " + hma); System.out.println ("Is map contains the value: "+hma.containsValue ("Python")); System.out.println ("Is map contains the value: "+hma.containsValue ("C++")); } }Output:
Values of hm: {1=C, 2=C++, 3=Java} Is map contains the value: false Is map contains the value: true
- clone (): This is used to return the same copy of the map.
import java.util.*; public class HashMapExample { public static void main (String [] args) { HashMap<Integer, String> hma = new HashMap<Integer, String> (); hma.put (1, "C"); hma.put (2, "C++"); hma.put (3, "Java"); System.out.println ("Values of hma: " + hma); hma.clone (); System.out.println (“Clone map:”+hma); } }Output:
Values of hma: {1=C, 2=C++, 3=Java} Clone map: {1=C, 2=C++, 3=Java}
- isEmpty (): It is used to return true if the map is empty otherwise false.
import java.util.*; public class HashMapExample { public static void main (String [] args) { HashMap<Integer, String> hma = new HashMap<Integer, String>(); hma.put (1, "C"); hma.put (2, "C++"); hma.put (3, "Java"); System.out.println ("Values of hma: " + hma); System.out.println ("Is map empty: "+hma.isEmpty ()); hma.clear (); System.out.println ("Is map empty: "+hma.isEmpty ()); } }Output:
Values of hm: {1=C, 2=C++, 3=Java} Is map empty: false Is map empty: true
- size (): This method is used to return the size of the map.
import java.util.*; public class HashMapExample { public static void main (String [] args) { HashMap<Integer, String> hma = new HashMap<Integer, String> (); hma.put (1, "C"); hma.put (2, "C++"); hma.put (3, "Java"); System.out.println ("Values of hma: " + hma); System.out.println ("Size of map: "+hma.size ()); hma.clear (); System.out.println ("Size of map: "+hma.size ()); } }Output:
Values of hma: {1=C, 2=C++, 3=Java} Size of map: 3 Size of map: 0
- putAll (Map m): This is used to copy all elements from the map to another map.
import java.util.*; public class HashMapExample { public static void main (String [] args) { HashMap<Integer, String> hma = new HashMap<Integer, String>(); hma.put (1, "C"); hma.put (2, "C++"); hma.put (3, "Java"); System.out.println ("Values of hma: " + hma); HashMap<Integer, String> hm1 = new HashMap<Integer, String> (); hm1.putAll (hm); System.out.println ("The new map: "+hm1); } }Output:
Values of hm: {1=C, 2=C++, 3=Java} The new map: {1=C, 2=C++, 3=Java}
- remove (object K): This is used to remove the value of the particular key.
import java.util.*; public class HashMapExample { public static void main (String [] args) { HashMap<Integer, String> hma = new HashMap<Integer, String> (); hma.put (1, "C"); hma.put (2, "C++"); hma.put (3, "Java"); System.out.println ("Values of hma: " + hma); hma.remove (3); System.out.println ("After removing: "+hma); } }Output:
Values of hm: {1=C, 2=C++, 3=Java} After removing: {1=C, 2=C++}
Difference between HashMap and HashTable:
HashMap | HashTable |
1. Traversed by Iterator. | 1. Traversed by Enumerator and Iterator. |
2. Inherits AbstractMap Class. | 2. Inherits Dictionary Class. |
3. Hashmap permits one null key and multiple null values. | 3. hashTable do not allow one null key and value. |
4. HashMap is not synchronized. | 4. HashTable is synchronized. |
5. Performance is fast. | 5. Performance is slow. |
6. Complexity is O (1). | 6. Complexity is O (1). |
7. Not legacy and introduced in 1.2v. | 7. Legacy and introduced in 1.0v. |
Traverse through a HashMap:
HashMap internally uses the Hashing technique. There are three ways to traverse in HashMap:- using iterator:
import java.util.*; public class IteratorExample { public static void main (String [] args) { HashMap<String, Integer> hm = new HashMap<String, Integer> (); hm.put ("TutorialandExample", 54); hm.put ("A computer portal", 80); hm.put ("For Students", 82); System.out.println ("Created HashMap is: " + hm); Iterator hmi= hm.entrySet ().iterator (); System.out.println ("HashMap after adding :"); while (hmi.hasNext ()) { Map.Entry m = (Map.Entry) hmi.next (); int marks = ((int)m.getValue () + 10); System.out.println (m.getKey () + “: “+ marks); } } }Output:
Created HashMap is: {For Students=82, A computer portal=80, TutorialandExample=54} HashMap after adding bonus marks: For Students: 92 A computer portal: 90 TutorialandExample: 64
- Using for-each loop:
import java.util.*; public class ForEachExample { public static void main (String [] args) { HashMap<String, Integer> hm = new HashMap<String, Integer> (); hm.put ("TutorialandExample", 54); hm.put ("A computer portal", 80); hm.put ("For Students", 82); System.out.println ("Created HashMap is: " + hm); for (Map.Entry m: hm.entrySet ()) { String key = (String) m.getKey(); int value = ((int) m.getValue () + 10); System.out.println (key + “: “+ value); } } }Output:
Created HashMap is: {For Students=82, A computer portal=80, TutorialandExample=54} For Students: 92 A computer portal: 90 TutorialandExample: 64
- Using forEach () method:
import java.util.*; public class ForEachExample { public static void main (String [] args) { HashMap<String, Integer> hm = new HashMap<String, Integer> (); hm.put ("TutorialandExample", 54); hm.put ("A computer portal", 80); hm.put ("For Students", 82); System.out.println ("Created HashMap is: " + hm); System.out.println ("HashMap after adding: "); forEach ((k, v) -> System.out.println (k + ": "+ (v + 10))); } }Output:
Created HashMap is: {For Students=82, A computer portal=80, TutorialandExample=54} HashMap after adding: For Students: 92 A computer portal: 90 TutorialandExample: 64