Java基礎(chǔ)教程之HashMap迭代刪除使用方法
前言
map的迭代刪除,和我們常見(jiàn)的list,set不太一樣,不能直接獲取Iteraotr對(duì)象,提供的刪除方法也是單個(gè)的,根據(jù)key進(jìn)行刪除,如果我們有個(gè)需求,將map中滿足某些條件的元素刪除掉,要怎么做呢?
I. Map 迭代刪除
迭代刪除,在不考慮并發(fā)安全的前提下,我們看下可以怎么支持
1. 非常不優(yōu)雅版本
我們知道m(xù)ap并不是繼承自Collection接口的,HashMap 也沒(méi)有提供迭代支持,既然沒(méi)法直接迭代,那我就老老實(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)怎么樣?并沒(méi)有什么毛病
(為啥不直接在遍歷中刪除?)
2. 正確姿勢(shì)版
雖然Map沒(méi)有迭代,但是它的entrySet有啊,所以我們可以通過(guò)它來(lái)實(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);
上面這個(gè)可能是我們經(jīng)常使用的操作姿勢(shì)了,利用迭代器來(lái)操作元素
3. 簡(jiǎn)潔版
到j(luò)dk8之后,針對(duì)容器提供了很多簡(jiǎn)潔的操作方式,迭代刪除這方面可以說(shuō)更加簡(jiǎn)單了
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)容,純屬一家之言,因個(gè)人能力有限,難免有疏漏和錯(cuò)誤之處,如發(fā)現(xiàn)bug或者有更好的建議,歡迎批評(píng)指正,不吝感激
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
@Transactional解讀(作用、失效場(chǎng)景與解決方式)
這篇文章主要介紹了關(guān)于@Transactional作用、失效場(chǎng)景與解決方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-08-08java模擬實(shí)現(xiàn)銀行ATM機(jī)操作
這篇文章主要為大家詳細(xì)介紹了java模擬實(shí)現(xiàn)銀行ATM機(jī)操作,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-05-05解決CentOS7中運(yùn)行jar包報(bào)錯(cuò):xxx(Permission?denied)
在實(shí)際工作我們經(jīng)常會(huì)在linux上運(yùn)行Spring boot編寫的微服務(wù)程序,下面這篇文章主要給大家介紹了關(guān)于如何解決CentOS7中運(yùn)行jar包報(bào)錯(cuò):xxx(Permission?denied)的相關(guān)資料,需要的朋友可以參考下2024-02-02java 中ArrayList迭代的兩種實(shí)現(xiàn)方法
這篇文章主要介紹了java 中ArrayList迭代的兩種實(shí)現(xiàn)方法的相關(guān)資料,Iterator與for語(yǔ)句的結(jié)合,需要的朋友可以參考下2017-09-09Mybatis實(shí)體類屬性與數(shù)據(jù)庫(kù)不一致解決方案
這篇文章主要介紹了Mybatis實(shí)體類屬性與數(shù)據(jù)庫(kù)不一致解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-10-10