Agenda
HashMap collection in java?
- HashMap is Hash table based implementation of the Map interface.
- HashMap provides constant-time performance for the basic operations like get & put.
- HashMap based implementation is not thread safe.
- In multi-threading environment, HashMap should be synchronized externally.
- If multiple threads access a hashmap concurrently then HashMap must synchronized externally.
Class hierarchy of HashMap collection
Put elements to HashMap Collection
Methods to insert or add elements to HashMap:
| No. | Method Name | Description |
|---|---|---|
| 1 | V put(K key, V value) | Associates the specified value with the specified key in this map. |
| 2 | void putAll(Map<? extends K,? extends V> m) | Copies all of the mappings from the specified map to this map. |
| 3 | default V putIfAbsent(K key, V value) | If the specified key is not already associated with a value (or is mapped to null) associates it with the given value and returns null, else returns the current value. |
Program: Put or Insert objects to HashMap collection (java /example)
package org.learn.collection.map.hmap;
import java.util.HashMap;
import java.util.Map;
public class DemoPutToHashMap {
public static void main(String[] args) {
Map<String, String> mapSportsPersonality = new HashMap<>();
System.out.println("Demo of put methods of HashMap collection: ");
demoPutMethod(mapSportsPersonality);
}
private static void demoPutMethod(Map<String, String> mapSportsPersonality) {
System.out.println("1. Orignal HashMap:\n" + mapSportsPersonality);
mapSportsPersonality.put("Tennis", "Federer");
mapSportsPersonality.put("Cricket", "Bradman");
System.out.println("2. Added Tennis & Cricket using put: \n" + mapSportsPersonality);
Map<String, String> newSportsMap = new HashMap<>();
newSportsMap.put("Golf", "Woods");
newSportsMap.put("Boxer", "Ali");
mapSportsPersonality.putAll(newSportsMap);
System.out.println("3. Added another map using putAll to map:\n" + mapSportsPersonality);
mapSportsPersonality.putIfAbsent("Baseball", "Trout");
// key Baseball already added to map, so "Kershaw" would not be added
mapSportsPersonality.putIfAbsent("Baseball", "Kershaw");
System.out.println("4. Added Baseball using putIfAbsent to map:\n" + mapSportsPersonality);
}
}
Output: insert string objects to HashMap (java /example)
Demo of put methods of HashMap collection:
1. Orignal HashMap:
{}
2. Added Tennis & Cricket using put:
{Tennis=Federer, Cricket=Bradman}
3. Added another map using putAll to map:
{Tennis=Federer, Cricket=Bradman, Golf=Woods, Boxer=Ali}
4. Added Baseball using putIfAbsent to map:
{Tennis=Federer, Cricket=Bradman, Golf=Woods, Baseball=Trout, Boxer=Ali}
putIfAbsent method of HashMap
- putIfAbsent method is defined in Map interface.
- putIfAbsent method is used to add entry to HashMap, if its not present in HashMap.
Prototype of putIfAbsent method
| Method Name | Description |
|---|---|
| default V putIfAbsent(K key, V value) | If the specified key is not already associated with a value (or is mapped to null) associates it with the given value and returns null, else returns the current value. |
Program – putIfAbsent method of HashMap in java
package org.learn.collection.map.hmap;
import java.util.AbstractMap;
import java.util.HashMap;
import java.util.Map;
public class DemoPutIfAbsentHashMap {
public static void main(String[] args) {
Map<String, String> mapSportsPersonality = new HashMap<>();
mapSportsPersonality.put("Tennis", "Federer");
mapSportsPersonality.put("baseball", "Trout");
mapSportsPersonality.put("Basketball", "Jordan");
mapSportsPersonality.put("Golf", "Woods");
System.out.println("Demo of putIfAbsent method: ");
demoPutIfAbsent(mapSportsPersonality);
}
private static void demoPutIfAbsent(Map<String, String> mapSportsPersonality) {
System.out.println("1. Orignal HashMap:" + mapSportsPersonality);
Map.Entry<String, String> newEntry = new AbstractMap.SimpleEntry<String, String>("Tennis", "Djokovic");
System.out.println("2. New entry to add:\n" + newEntry);
String existingValue = mapSportsPersonality.putIfAbsent(newEntry.getKey(), newEntry.getValue());
if (null != existingValue) {
System.out.println("Key :" + newEntry.getKey() + " already exists, Record not inserted");
System.out.println("Entries in hashmap:" + mapSportsPersonality);
} else {
System.out.println("New record added to hashMap:\n"+mapSportsPersonality);
}
newEntry = new AbstractMap.SimpleEntry<String, String>("Boxer", "Ali");
System.out.println("3. New entry to add:\n" + newEntry);
existingValue = mapSportsPersonality.putIfAbsent(newEntry.getKey(), newEntry.getValue());
if (null != existingValue) {
System.out.println("Key :" + newEntry.getKey() + " already exists, Record not inserted");
System.out.println("Entries in hashmap:" + mapSportsPersonality);
} else {
System.out.println("New record added to hashMap:\n" + mapSportsPersonality);
}
}
}
Output – putIfAbsent method of HashMap in java
Demo of putIfAbsent method:
1. Orignal HashMap:{Tennis=Federer, Golf=Woods, baseball=Trout, Basketball=Jordan}
2. New entry to add:
Tennis=Djokovic
Key :Tennis already exists, Record not inserted
Entries in hashmap:{Tennis=Federer, Golf=Woods, baseball=Trout, Basketball=Jordan}
3. New entry to add:
Boxer=Ali
New record added to hashMap:
{Tennis=Federer, Golf=Woods, baseball=Trout, Basketball=Jordan, Boxer=Ali}
Iterate HashMap collection having string objects
- We will iterate or loop through HashMap collection using following methods:
- Iterate HashMap using forEach method of java 8
- Iterate HashMap using entrySet Iterator.
Iterate HashMap collection having string objects (Java8)
package org.learn.collection.map.hmap;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
public class DemoIterationHashMap {
public static void main(String[] args) {
Map<String, String> mapSportsPersonality = new HashMap<>();
mapSportsPersonality.put("Tennis", "Federer");
mapSportsPersonality.put("Cricket", "Bradman");
mapSportsPersonality.put("Basketball", "Jordan");
mapSportsPersonality.put("Golf", "Woods");
mapSportsPersonality.put("Boxer", "Ali");
System.out.println("Demo: Iterate HashMap collection in java ");
demoIterateMethod(mapSportsPersonality);
}
private static void demoIterateMethod(Map<String, String> mapSportsPersonality) {
System.out.println("1. Iterate HashMap using forEach method:");
// Output using Java 8
mapSportsPersonality.forEach((key, value) -> {
System.out.println("Game:" + key + ", Player:" + value);
});
System.out.println("\n2. Iterate HashMap collection using entrySet iterator:");
// Output use Iterator:
Set<Entry<String, String>> entrySet = mapSportsPersonality.entrySet();
Iterator<Entry<String, String>> iterator = entrySet.iterator();
while(iterator.hasNext()) {
Map.Entry<String, String> entry = iterator.next();
System.out.println("Game:" + entry.getKey() + ", Player:" + entry.getValue());
}
}
}
Output: Iterate HashMap collection having string objects
Demo: Iterate HashMap collection in java 1. Iterate HashMap using forEach method: Game:Tennis, Player:Federer Game:Cricket, Player:Bradman Game:Golf, Player:Woods Game:Basketball, Player:Jordan Game:Boxer, Player:Ali 2. Iterate HashMap collection using entrySet iterator: Game:Tennis, Player:Federer Game:Cricket, Player:Bradman Game:Golf, Player:Woods Game:Basketball, Player:Jordan Game:Boxer, Player:Ali
Remove elements/string objects from HashMap
Methods to remove elements or objects from HashMap collection
| No. | Method Name | Description |
|---|---|---|
| 1 | V remove(Object key) | Removes the mapping for the specified key from this map if present. |
| 2 | boolean remove(Object key, Object value) | Removes the entry for the specified key only if it is currently mapped to the specified value. |
We will demonstrate the removal of keys using entrySet iterator.
Program: remove elements objects from HashMap collection
package org.learn.collection.map.hmap;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
public class DemoRemoveHashMap {
public static void main(String[] args) {
Map<String, String> mapSportsPersonality = new HashMap<>();
mapSportsPersonality.put("Tennis", "Federer");
mapSportsPersonality.put("Cricket", "Bradman");
mapSportsPersonality.put("Basketball", "Jordan");
mapSportsPersonality.put("Golf", "Woods");
mapSportsPersonality.put("Boxer", "Ali");
System.out.println("Demo HashMap collection remove methods : ");
demoRemoveMethod(mapSportsPersonality);
}
private static void demoRemoveMethod(Map<String, String> mapSportsPersonality) {
// {Tennis=Federer, Cricket=Bradman, Golf=Woods, Basketball=Jordan, Boxer=Ali}
System.out.println("1. Orignal hashmap:\n" + mapSportsPersonality);
// Remove Cricket from map
mapSportsPersonality.remove("Cricket");
// {Tennis=Federer, Golf=Woods, Basketball=Jordan, Boxer=Ali}
System.out.println("2. Removed Cricket from map : \n" + mapSportsPersonality);
mapSportsPersonality.remove("Boxer","Ali");
// {Tennis=Federer, Golf=Woods, Basketball=Jordan}
System.out.println("3. Removed entry from map with Key=Boxer and Value=Ali:\n " + mapSportsPersonality);
Set<Entry<String, String>> entrySet = mapSportsPersonality.entrySet();
Iterator<Entry<String, String>> iterator = entrySet.iterator();
while(iterator.hasNext()) {
Map.Entry<String, String> entry = iterator.next();
if (entry.getKey().equals("Basketball")) {
iterator.remove();
} else if (entry.getKey().equals("Golf")) {
iterator.remove();
}
}
// {Tennis=Federer}
System.out.println("4. Removed Basketball,Golf during iteration:\n " + mapSportsPersonality);
}
}
Output: remove elements objects from HashMap collection
Demo HashMap collection remove methods:
1. Orignal hashmap:
{Tennis=Federer, Cricket=Bradman, Golf=Woods, Basketball=Jordan, Boxer=Ali}
2. Removed Cricket from map :
{Tennis=Federer, Golf=Woods, Basketball=Jordan, Boxer=Ali}
3. Removed entry from map with Key=Boxer and Value=Ali:
{Tennis=Federer, Golf=Woods, Basketball=Jordan}
4. Removed Basketball,Golf during iteration:
{Tennis=Federer}
Sort HashMap by keys in java (ascending & descending order)
- Sort the HashMap by keys in ascending & descending order.
- Map<String, String> mapSportsPersonality = new HashMap<>().
- Print the sorted map using forEach method (Java 8)
Program – sort HashMap by keys in ascending & descending order
package org.learn.collection.map.hmap;
import java.util.HashMap;
import java.util.Map;
import java.util.TreeMap;
public class SortElementInArrayList {
public static void main(String[] args) {
Map<String, String> mapSportsPersonality = new HashMap<>();
mapSportsPersonality.put("Tennis", "Federer");
mapSportsPersonality.put("Cricket", "Bradman");
mapSportsPersonality.put("Basketball", "Jordan");
mapSportsPersonality.put("Golf", "Woods");
mapSportsPersonality.put("Boxer", "Ali");
System.out.println("Demo of sort methods: ");
demoSortMethod(mapSportsPersonality);
}
private static void demoSortMethod(Map<String, String> mapSportsPersonality) {
// {Tennis=Federer, Cricket=Bradman, Golf=Woods, Basketball=Jordan, Boxer=Ali}
System.out.println("Orignal HashMap:" + mapSportsPersonality);
System.out.println("\n1. Sort HashMap by ascending keys: " );
TreeMap<String,String>mapSorted = new TreeMap<>(mapSportsPersonality);
mapSorted.forEach((key, value) -> {
System.out.println(key + ", " + value);
});
System.out.println("\n2. Sort HashMap by descending keys: " );
mapSorted.descendingMap().forEach((key, value) -> {
System.out.println( key + ", " + value);
});
}
}
Output – Sort HashMap in ascending & descending order
Demo of sort methods:
Orignal HashMap:{Tennis=Federer, Cricket=Bradman, Golf=Woods, Basketball=Jordan, Boxer=Ali}
1. Sort HashMap by ascending keys:
Basketball, Jordan
Boxer, Ali
Cricket, Bradman
Golf, Woods
Tennis, Federer
2. Sort HashMap by descending keys:
Tennis, Federer
Golf, Woods
Cricket, Bradman
Boxer, Ali
Basketball, Jordan