When working with a HashMap in Java, you often need to remove an entry (a key-value pair). The Java Map API provides multiple ways to achieve this, depending on whether you know the key, the key-value pair, or want to remove entries conditionally.
Different Ways to Remove Entries from HashMap
- Using remove(Object key)- Removes the mapping for the specified key. See Example
- Using remove(Object key, Object value)- Removes the entry only if the key is mapped to the given value. See Example
- Using Iterator.remove()- Removes entries while iterating through the map. See Example
- Using removeIf() method- Removes entries based on a condition. See Example
So, let's see when to use which method and why.
Removing entry from HashMap using remove(Object key)
If you already know the key, the simplest and most efficient way is to use the remove(Object key) method. This method returns the value previously associated with the key, or null if no mapping existed.
Here is an example with the map of cities where we'll try to remove Map.entry by passing one of the key.
import java.util.HashMap;
import java.util.Map;
public class RemoveEntryDemo {
public static void main(String[] args) {
// Setting up a HashMap
Map<String, String> cityMap = new HashMap<String, String>();
cityMap.put("1","New York City" );
cityMap.put("2", "New Delhi");
cityMap.put("3", "Mumbai");
cityMap.put("4", "Berlin");
System.out.println("*** Map Initially ***");
System.out.println(cityMap);
cityMap.remove("4");
System.out.println("*** Map After removal ***");
System.out.println(cityMap);
}
}
Output
*** Map Initially ***
{1=New York City, 2=New Delhi, 3=Mumbai, 4=Berlin}
*** Map After removal ***
{1=New York City, 2=New Delhi, 3=Mumbai}
As you can see the entry with key as "4" is removed from the HashMap.
Removing entry from HashMap using remove(Object key, Object value) method
This is another overloaded remove() method in Map which makes removing an entry more restrictive. This method removes the entry for the specified key only if it is currently mapped to the specified value.
public class RemoveEntryDemo {
public static void main(String[] args) {
// Setting up a HashMap
Map<String, String> cityMap = new HashMap<String, String>();
cityMap.put("1","New York City" );
cityMap.put("2", "New Delhi");
cityMap.put("3", "Mumbai");
cityMap.put("4", "Berlin");
System.out.println("*** Map Initially ***");
System.out.println(cityMap);
cityMap.remove("4", "Berlin");
System.out.println("*** Map After removal ***");
System.out.println(cityMap);
}
}
Output
{1=New York City, 2=New Delhi, 3=Mumbai, 4=Berlin}
*** Map After removal ***
{1=New York City, 2=New Delhi, 3=Mumbai}
Since the passed key "4" is mapped to the specified value "Berlin" so entry is removed.
If you give a value that is not mapped with any key no entry is removed. For example, if you try
cityMap.remove("4", "London"); HashMap will have no change.
Using iterator's remove() method
Sometimes you may not know the key in advance and need to iterate through a HashMap to find and remove a specific entry. In such cases, using the Iterator.remove() method is the safest and most reliable approach.
Why Use Iterator’s remove()?
When you iterate over a HashMap, you typically obtain a collection view (such as entrySet(), keySet(), or values()). The iterators returned by these collection views are fail-fast. This means that if the map is structurally modified after the iterator is created, except through the iterator’s own remove() method, a ConcurrentModificationException will be thrown.
Here is an example where remove() method of the Map is used to remove an entry (Structural modification) rather than using the remove() method of the iterator. This operation results in ConcurrentModificationException being thrown.
public class RemoveEntryDemo {
public static void main(String[] args) {
// Setting up a HashMap
Map<String, String> cityMap = new HashMap<String, String>();
cityMap.put("1","New York City" );
cityMap.put("2", "New Delhi");
cityMap.put("3", "Mumbai");
cityMap.put("4", "Berlin");
System.out.println("*** Map Initially ***");
System.out.println(cityMap);
Iterator<Entry<String, String>> itr = cityMap.entrySet().iterator();
while(itr.hasNext()) {
String key = itr.next().getKey();
if(key.equals("2")) {
cityMap.remove(key);
}
}
System.out.println("*** Map After removal ***");
System.out.println(cityMap);
}
}
Output
*** Map Initially ***
{1=New York City, 2=New Delhi, 3=Mumbai, 4=Berlin}
Exception in thread "main" java.util.ConcurrentModificationException
at java.base/java.util.HashMap$HashIterator.nextNode(HashMap.java:1597)
at java.base/java.util.HashMap$EntryIterator.next(HashMap.java:1630)
at java.base/java.util.HashMap$EntryIterator.next(HashMap.java:1628)
at com.netjstech.collections.RemoveEntryDemo.main(RemoveEntryDemo.java:23)
Correct way to remove an entry from a Map while iterating it is to use iterator's remove() method.
public class RemoveEntryDemo {
public static void main(String[] args) {
// Setting up a HashMap
Map<String, String> cityMap = new HashMap<String, String>();
cityMap.put("1","New York City" );
cityMap.put("2", "New Delhi");
cityMap.put("3", "Mumbai");
cityMap.put("4", "Berlin");
System.out.println("*** Map Initially ***");
System.out.println(cityMap);
Iterator<Entry<String, String>> itr = cityMap.entrySet().iterator();
while(itr.hasNext()) {
if(itr.next().getKey().equals("2")) {
itr.remove();
}
}
System.out.println("*** Map After removal ***");
System.out.println(cityMap);
}
}
Output
*** Map Initially ***
{1=New York City, 2=New Delhi, 3=Mumbai, 4=Berlin}
*** Map After removal ***
{1=New York City, 3=Mumbai, 4=Berlin}
Using removeIf() method
removeIf() method is in Collection interface, since Map doesn't implement Collection so removeIf() method is not
directly accessible in HashMap but after getting the Collection view of a Map removeIf() method can be used.
public class RemoveEntryDemo {
public static void main(String[] args) {
// Setting up a HashMap
Map<String, String> cityMap = new HashMap<String, String>();
cityMap.put("1","New York City" );
cityMap.put("2", "New Delhi");
cityMap.put("3", "Mumbai");
cityMap.put("4", "Berlin");
System.out.println("*** Map Initially ***");
System.out.println(cityMap);
cityMap.entrySet().removeIf(entry -> entry.getKey().equals("2"));
System.out.println("*** Map After removal ***");
System.out.println(cityMap);
}
}
Output
*** Map Initially ***
{1=New York City, 2=New Delhi, 3=Mumbai, 4=Berlin}
*** Map After removal ***
{1=New York City, 3=Mumbai, 4=Berlin}
If you have a collection view of values then
cityMap.values().removeIf(v -> v.equals("Mumbai"));
Same way if you have a collection view of keys
cityMap.keySet().removeIf(k -> k.equals("2"));
That's all for this topic How to Remove Entry From HashMap in Java. If you have any doubt or any suggestions to make please drop a comment. Thanks!
Related Topics
You may also like-

