Java遍歷并刪除Map的四種方法對(duì)比
在Java中,遍歷并刪除 Map 中的元素有幾種常見的方法。每種方法都有其適用場(chǎng)景和優(yōu)缺點(diǎn)。以下是幾種常見的方法:
方法一:使用 Iterator
使用 Iterator 是一種安全的方法,可以在遍歷過程中刪除元素,而不會(huì)拋出 ConcurrentModificationException。
import java.util.*; public class Main { public static void main(String[] args) { // 創(chuàng)建一個(gè)示例 Map Map<String, Integer> map = new HashMap<>(); map.put("apple", 1); map.put("banana", 2); map.put("cherry", 3); map.put("date", 4); // 使用 Iterator 遍歷并刪除符合條件的元素 Iterator<Map.Entry<String, Integer>> iterator = map.entrySet().iterator(); while (iterator.hasNext()) { Map.Entry<String, Integer> entry = iterator.next(); if (entry.getValue() % 2 == 0) { iterator.remove(); } } // 打印結(jié)果 System.out.println(map); // 輸出: {apple=1, cherry=3} } }
方法二:使用 Java 8 的 removeIf 方法
Java 8 引入了 Collection 接口的 removeIf 方法,可以方便地刪除符合條件的元素。
import java.util.*; public class Main { public static void main(String[] args) { // 創(chuàng)建一個(gè)示例 Map Map<String, Integer> map = new HashMap<>(); map.put("apple", 1); map.put("banana", 2); map.put("cherry", 3); map.put("date", 4); // 使用 removeIf 方法刪除符合條件的元素 map.values().removeIf(value -> value % 2 == 0); // 打印結(jié)果 System.out.println(map); // 輸出: {apple=1, cherry=3} } }
方法三:使用 for-each 循環(huán)和臨時(shí)集合
如果使用 for-each 循環(huán)直接刪除元素會(huì)導(dǎo)致 ConcurrentModificationException,可以先將要?jiǎng)h除的元素存儲(chǔ)在臨時(shí)集合中,然后再進(jìn)行刪除。
import java.util.*; public class Main { public static void main(String[] args) { // 創(chuàng)建一個(gè)示例 Map Map<String, Integer> map = new HashMap<>(); map.put("apple", 1); map.put("banana", 2); map.put("cherry", 3); map.put("date", 4); // 使用臨時(shí)集合存儲(chǔ)要?jiǎng)h除的元素 List<String> keysToRemove = new ArrayList<>(); for (Map.Entry<String, Integer> entry : map.entrySet()) { if (entry.getValue() % 2 == 0) { keysToRemove.add(entry.getKey()); } } // 刪除臨時(shí)集合中的元素 for (String key : keysToRemove) { map.remove(key); } // 打印結(jié)果 System.out.println(map); // 輸出: {apple=1, cherry=3} } }
方法四:使用 Map 的 entrySet 和 remove 方法
直接使用 Map 的 entrySet 和 remove 方法也可以實(shí)現(xiàn)刪除操作,但需要注意避免 ConcurrentModificationException。
import java.util.*; public class Main { public static void main(String[] args) { // 創(chuàng)建一個(gè)示例 Map Map<String, Integer> map = new HashMap<>(); map.put("apple", 1); map.put("banana", 2); map.put("cherry", 3); map.put("date", 4); // 使用 entrySet 和 remove 方法刪除符合條件的元素 Set<Map.Entry<String, Integer>> entries = map.entrySet(); for (Map.Entry<String, Integer> entry : entries) { if (entry.getValue() % 2 == 0) { map.remove(entry.getKey()); } } // 打印結(jié)果 System.out.println(map); // 輸出: {apple=1, cherry=3} } }
總結(jié)
使用 Iterator:適用于任何類型的 Map,是最安全的方法。
使用 Java 8 的 removeIf 方法:簡(jiǎn)潔且易于理解,適用于支持 removeIf 方法的集合。
使用 for-each 循環(huán)和臨時(shí)集合:避免 ConcurrentModificationException,但需要額外的內(nèi)存開銷。
使用 Map 的 entrySet 和 remove 方法:直接操作 Map,但需要注意避免 ConcurrentModificationException。
到此這篇關(guān)于Java遍歷并刪除Map的四種方法對(duì)比的文章就介紹到這了,更多相關(guān)Java遍歷并刪除Map內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java使用JDBC連接postgresql數(shù)據(jù)庫(kù)示例
這篇文章主要介紹了Java使用JDBC連接postgresql數(shù)據(jù)庫(kù),結(jié)合實(shí)例形式分析了jdbc連接postgresql數(shù)據(jù)庫(kù)及數(shù)值插入、更新、查詢等相關(guān)操作技巧,需要的朋友可以參考下2019-01-01淺談如何在項(xiàng)目中使用Spring Cloud Alibaba Sentinel組件
隨著微服務(wù)的流行,服務(wù)和服務(wù)之間的穩(wěn)定性變得越來(lái)越重要。本文主要介紹了使用Spring Cloud Alibaba Sentinel組件,感興趣的可以了解一下2021-07-07java中synchronized Lock(本地同步)鎖的8種情況
本文主要介紹了java中synchronized Lock(本地同步)鎖的8種情況,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09Javaweb會(huì)話跟蹤技術(shù)Cookie和Session的具體使用
本文主要介紹了Javaweb會(huì)話跟蹤技術(shù)Cookie&Session的具體使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07Java下利用Jackson進(jìn)行JSON解析和序列化示例
本篇文章主要介紹了Java下利用Jackson進(jìn)行JSON解析和序列化示例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-02-02Java用單向環(huán)形鏈表來(lái)解決約瑟夫環(huán)Josepfu問題
如果把單鏈表的最后一個(gè)節(jié)點(diǎn)的指針指向鏈表頭部,而不是指向NULL,那么就構(gòu)成了一個(gè)單向循環(huán)鏈表,通俗講就是把尾節(jié)點(diǎn)的下一跳指向頭結(jié)點(diǎn)2021-10-10