In this article we will discuss different ways to remove elements from HashMap while Iterating.
Let’s create a HashMap of String as Key and Integer as value and add some elements into it i.e.
// Create a HashMap of string and int HashMap<String, Integer> wordFreqMap = new HashMap<>(); // Add elements in Map wordFreqMap.put("this", 6); wordFreqMap.put("at", 10); wordFreqMap.put("is", 9); wordFreqMap.put("for", 1); wordFreqMap.put("the", 12);
Now lets remove elements from this HashMap while iterating using 2 different techniques
Remove elements from HashMap while Iterating using KeySet
keyset() method of HashMap returns a set of keys in the HashMap and its backed by HashMap i.e. any items removed from the Key Set will be removed from HashMap too.
So lets Iterate over the HashMap using KeySet Iterator and remove all the elements whose value is ODD, while Iterating i.e.
// Create a Iterator to KeySet of HashMap Iterator<String> it = wordFreqMap.keySet().iterator(); // Iterate over all the elements while (it.hasNext()) { String key = it.next(); // Check if Value associated with Key is ODD if (wordFreqMap.get(key) % 2 == 1) { // Remove the element it.remove(); } }
Remove elements from Hahsmap while Iterating using EntrySet
HashMap member function entrySet() returns a set of Entry<K,V> in the HashMap and its backed by HashMap i.e. any items remover from the Entry Set will be removed from HashMap too.
Frequently Asked:
- Java : How to update the value of an existing key in HashMap | put() vs replace()
- Java: How to get all keys by a value in HashMap ? | Search by Value in Map
- Java : Creating HashMap by associating multiple values with same Key
- Java : How to Remove elements from HashMap while Iterating
So lets Iterate over the HashMap using Entry Set Iterator and remove all the elements whose value is 10 while Iterating i.e.
// Create a Iterator to EntrySet of HashMap Iterator<Entry<String, Integer>> entryIt = wordFreqMap.entrySet().iterator(); // Iterate over all the elements while (entryIt.hasNext()) { Entry<String, Integer> entry = entryIt.next(); // Check if Value associated with Key is 10 if (entry.getValue() == 10) { // Remove the element entryIt.remove(); } }
Complete example is as follows,
package com.thispointer.examples.java.collection.hashmap; import java.util.HashMap; import java.util.Iterator; import java.util.Map.Entry; import java.util.function.Predicate; import java.util.Set; public class IterateRemove { public static void main(String[] args) { // Create a HashMap of string and int HashMap<String, Integer> wordFreqMap = new HashMap<>(); // Add elements in Map wordFreqMap.put("this", 6); wordFreqMap.put("at", 10); wordFreqMap.put("is", 9); wordFreqMap.put("for", 1); wordFreqMap.put("the", 12); System.out.println("*********Map Contents ****"); System.out.println(wordFreqMap); System.out.println("Remove While Iterating using KeySet Iterator"); System.out.println("*********Remove All Elements while Iterating Whose Value is ODD ****"); // Create a Iterator to KeySet of HashMap Iterator<String> it = wordFreqMap.keySet().iterator(); // Iterate over all the elements while (it.hasNext()) { String key = it.next(); // Check if Value associated with Key is ODD if (wordFreqMap.get(key) % 2 == 1) { // Remove the element it.remove(); } } System.out.println(wordFreqMap); System.out.println("Remove While Iterating using EntrySet Iterator"); System.out.println("*********Remove All Elements Whose Value is 10 ****"); // Create a Iterator to EntrySet of HashMap Iterator<Entry<String, Integer>> entryIt = wordFreqMap.entrySet().iterator(); // Iterate over all the elements while (entryIt.hasNext()) { Entry<String, Integer> entry = entryIt.next(); // Check if Value associated with Key is 10 if (entry.getValue() == 10) { // Remove the element entryIt.remove(); } } System.out.println(wordFreqMap); } }
Output
*********Map Contents **** {the=12, at=10, this=6, for=1, is=9} Remove While Iterating using KeySet Iterator *********Remove All Elements while Iterating Whose Value is ODD **** {the=12, at=10, this=6} Remove While Iterating using EntrySet Iterator *********Remove All Elements Whose Value is 10 **** {the=12, this=6}