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

2021-09-23 22:39:50 字數 1816 閱讀 7280

map的迭代刪除,和我們常見的list,set不太一樣,不能直接獲取iteraotr物件,提供的刪除方法也是單個的,根據key進行刪除,如果我們有個需求,將map中滿足某些條件的元素刪除掉,要怎麼做呢?

迭代刪除,在不考慮併發安全的前提下,我們看下可以怎麼支援

我們知道map並不是繼承自collection介面的,hashmap 也沒有提供迭代支援,既然沒法直接迭代,那我就老老實的low b版好了

map

map =

newhashmap

<

>()

;map.

put(

"a",1)

;map.

put(

"b",2)

;map.

put(

"c",3)

;map.

put(

"d",4)

;list

removekey =

newarraylist

<

>()

;for

(map.entry

e: map.

entryset()

)}removekey.

foreach

(map:

:remove)

;

上面的實現怎麼樣?並沒有什麼毛病

(為啥不直接在遍歷中刪除?)

雖然map沒有迭代,但是它的entryset有啊,所以我們可以通過它來實現遍歷刪除

map

map =

newhashmap

<

>()

;map.

put(

"a",1)

;map.

put(

"b",2)

;map.

put(

"c",3)

;map.

put(

"d",4)

;iterator

> iterator = map.

entryset()

.iterator()

;map.entry

entry;

while

(iterator.

hasnext()

)}system.out.

println

(map)

;

上面這個可能是我們經常使用的操作姿勢了,利用迭代器來操作元素

到jdk8之後,針對容器提供了很多簡潔的操作方式,迭代刪除這方面可以說更加簡單了

map

map =

newhashmap

<

>()

;map.

put(

"a",1)

;map.

put(

"b",2)

;map.

put(

"c",3)

;map.

put(

"d",4)

;map.

entryset()

.removeif

(entry -

> entry.

getvalue()

%2==0

);

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

個人站點 一灰灰blog:

java 集合學習之hashMap

1 hashmap類繼承關係 public class hashmapextends abstractmap implements map,cloneable,serializable 存放示意圖 由此可以看出hash值一樣的節點會被存放在同一條鍊錶上,比原始遍歷equals查詢效率高 hash值相...

java之HashMap和HashSet的遍歷方法

今天去面試,面試官問到這個問題,發現自己用了這麼久的hashmap和hashset,竟然只勉強想到了一種方法,總結一下 hashmap遍歷方法 1 使用entryset for map.entryentry map.entryset 2 使用entry的迭代器 iterator iterator m...

Java原始碼分析之HashMap

預設的初始容量,空間必須為2的冪 static final int default initial capacity 1 4 aka 16 最大容量 static final int maximum capacity 1 30 預設的載入因子,這裡解釋一下載入因子,在map被建立後,就有了乙個容量,...