Java之HashMap迭代刪除使用方法小結

map的迭代刪除,和咱們常見的list,set不太同樣,不能直接獲取Iteraotr對象,提供的刪除方法也是單個的,根據key進行刪除,若是咱們有個需求,將map中知足某些條件的元素刪除掉,要怎麼作呢?java

<!-- more -->git

I. Map 迭代刪除

迭代刪除,在不考慮併發安全的前提下,咱們看下能夠怎麼支持github

1. 很是不優雅版本

咱們知道map並非繼承自Collection接口的,HashMap 也沒有提供迭代支持,既然無法直接迭代,那我就老老實的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);

上面的實現怎麼樣?並無什麼毛病併發

(爲啥不直接在遍歷中刪除?)學習

2. 正確姿式版

雖然Map沒有迭代,可是它的entrySet有啊,因此咱們能夠經過它來實現遍歷刪除code

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);

上面這個多是咱們常常使用的操做姿式了,利用迭代器來操做元素對象

3. 簡潔版

到jdk8以後,針對容器提供了不少簡潔的操做方式,迭代刪除這方面能夠說更加簡單了blog

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);

II. 其餘

1. 一灰灰Bloghttps://liuyueyi.github.io/hexblog

一灰灰的我的博客,記錄全部學習和工做中的博文,歡迎你們前去逛逛繼承

2. 聲明

盡信書則不如,已上內容,純屬一家之言,因我的能力有限,不免有疏漏和錯誤之處,如發現bug或者有更好的建議,歡迎批評指正,不吝感激

3. 掃描關注

一灰灰blog

QrCode

知識星球

goals

相關文章
相關標籤/搜索