Java基礎(chǔ)教程之HashMap迭代刪除使用方法
前言
map的迭代刪除,和我們常見的list,set不太一樣,不能直接獲取Iteraotr對象,提供的刪除方法也是單個的,根據(jù)key進(jìn)行刪除,如果我們有個需求,將map中滿足某些條件的元素刪除掉,要怎么做呢?
I. Map 迭代刪除
迭代刪除,在不考慮并發(fā)安全的前提下,我們看下可以怎么支持
1. 非常不優(yōu)雅版本
我們知道m(xù)ap并不是繼承自Collection接口的,HashMap 也沒有提供迭代支持,既然沒法直接迭代,那我就老老實(shí)的low b版好了
Map<String, Integer> map = new HashMap<>();
map.put("a", 1);
map.put("b", 2);
map.put("c", 3);
map.put("d", 4);
List<String> removeKey = new ArrayList<>();
for (Map.Entry<String, Integer> e: map.entrySet()) {
if (e.getValue() % 2== 0) {
removeKey.add(e.getKey());
}
}
removeKey.forEach(map::remove);
上面的實(shí)現(xiàn)怎么樣?并沒有什么毛病
(為啥不直接在遍歷中刪除?)
2. 正確姿勢版
雖然Map沒有迭代,但是它的entrySet有啊,所以我們可以通過它來實(shí)現(xiàn)遍歷刪除
Map<String, Integer> map = new HashMap<>();
map.put("a", 1);
map.put("b", 2);
map.put("c", 3);
map.put("d", 4);
Iterator<Map.Entry<String, Integer>> iterator = map.entrySet().iterator();
Map.Entry<String, Integer> entry;
while (iterator.hasNext()) {
entry = iterator.next();
if (entry.getValue() % 2 == 0) {
iterator.remove();
}
}
System.out.println(map);
上面這個可能是我們經(jīng)常使用的操作姿勢了,利用迭代器來操作元素
3. 簡潔版
到j(luò)dk8之后,針對容器提供了很多簡潔的操作方式,迭代刪除這方面可以說更加簡單了
Map<String, Integer> map = new HashMap<>();
map.put("a", 1);
map.put("b", 2);
map.put("c", 3);
map.put("d", 4);
map.entrySet().removeIf(entry -> entry.getValue() % 2 == 0);
4. 其他
盡信書則不如,已上內(nèi)容,純屬一家之言,因個人能力有限,難免有疏漏和錯誤之處,如發(fā)現(xiàn)bug或者有更好的建議,歡迎批評指正,不吝感激
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對腳本之家的支持。
相關(guān)文章
Java?NIO實(shí)現(xiàn)聊天系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了Java?NIO實(shí)現(xiàn)聊天系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-11-11
使用ByteArrayOutputStream寫入字符串方式
這篇文章主要介紹了使用ByteArrayOutputStream寫入字符串方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-12-12
Java使用ES?Client?調(diào)用滾動查詢及Elasticsearch滾動查詢Scrolling機(jī)制
Elasticsearch提供了一種稱為"滾動查詢"(Scrolling)的機(jī)制,用于處理大型數(shù)據(jù)集的分頁查詢,這篇文章給大家介紹滾動查詢的一般步驟及Java使用ESClient調(diào)用滾動查詢的方法,感興趣的朋友一起看看吧2023-08-08
為什么禁止在SpringBoot項(xiàng)目中使用@Autowired注解
寫代碼的時候突然發(fā)現(xiàn)?idea?在屬性注入的?@Autowired?注解上給出警告提示,spring?framework?4.0?以后開始出現(xiàn)的,spring?4.0?開始就不推薦使用屬性注入,改為推薦構(gòu)造器注入和?setter?注入,推薦的方法是使用基于構(gòu)造函數(shù)和基于setter的依賴注入2024-08-08
Java實(shí)現(xiàn)每日給女友微信發(fā)送早安信息
這篇文章主要為大家詳細(xì)介紹了Java如何實(shí)現(xiàn)每日給女友微信發(fā)送早安等微信信息,文中的示例代碼講解詳細(xì),具有一定的借鑒價值,需要的可以了解一下2022-12-12

