這篇文章主要講解了“HashMap遍歷方法是什么”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“HashMap遍歷方法是什么”吧!
我們一直強調(diào)成都做網(wǎng)站、成都網(wǎng)站設(shè)計、成都外貿(mào)網(wǎng)站建設(shè)對于企業(yè)的重要性,如果您也覺得重要,那么就需要我們慎重對待,選擇一個安全靠譜的網(wǎng)站建設(shè)公司,企業(yè)網(wǎng)站我們建議是要么不做,要么就做好,讓網(wǎng)站能真正成為企業(yè)發(fā)展過程中的有力推手。專業(yè)網(wǎng)絡(luò)公司不一定是大公司,創(chuàng)新互聯(lián)公司作為專業(yè)的網(wǎng)絡(luò)公司選擇我們就是放心。
Iterator> entryIterator = map.entrySet().iterator();
while (entryIterator.hasNext()) {
Map.Entry next = entryIterator.next();
System.out.println("key=" + next.getKey() + " value=" + next.getValue());
}
Iterator iterator = map.keySet().iterator();
while (iterator.hasNext()){
String key = iterator.next();
System.out.println("key=" + key + " value=" + map.get(key));
}
map.forEach((key,value)->{
System.out.println("key=" + key + " value=" + value);
});
強烈建議使用第一種 EntrySet 進(jìn)行遍歷。
第一種可以把 key value 同時取出,第二種還得需要通過 key 取一次 value,效率較低, 第三種需要 JDK1.8 以上,通過外層遍歷 table,內(nèi)層遍歷鏈表或紅黑樹。
在并發(fā)環(huán)境下使用 HashMap 容易出現(xiàn)死循環(huán)。
并發(fā)場景發(fā)生擴(kuò)容,調(diào)用 resize() 方法里的 rehash() 時,容易出現(xiàn)環(huán)形鏈表。這樣當(dāng)獲取一個不存在的 key 時,計算出的 index 正好是環(huán)形鏈表的下標(biāo)時就會出現(xiàn)死循環(huán)。
所以 HashMap 只能在單線程中使用,并且盡量的預(yù)設(shè)容量,盡可能的減少擴(kuò)容。
在 JDK1.8 中對 HashMap 進(jìn)行了優(yōu)化: 當(dāng) hash 碰撞之后寫入鏈表的長度超過了閾值(默認(rèn)為8),鏈表將會轉(zhuǎn)換為紅黑樹。
假設(shè) hash 沖突非常嚴(yán)重,一個數(shù)組后面接了很長的鏈表,此時重新的時間復(fù)雜度就是 O(n) 。
如果是紅黑樹,時間復(fù)雜度就是 O(logn) 。
大大提高了查詢效率。
感謝各位的閱讀,以上就是“HashMap遍歷方法是什么”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對HashMap遍歷方法是什么這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!