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被建立後,就有了乙個容量,...