? ? ? ?JDK 8 之后的開發(fā)環(huán)境,推薦使用 Stream 的遍歷方式瓜客,因為它足夠簡潔;而如果在遍歷的過程中需要動態(tài)的刪除元素竿开,那么推薦使用迭代器的遍歷方式谱仪;如果在遍歷的時候,比較在意程序的執(zhí)行效率否彩,那么推薦使用 Stream 多線程遍歷的方式疯攒,因為它足夠快。所以這個問題的答案是不固定的列荔,我們需要知道每種遍歷方法的優(yōu)缺點敬尺,再根據(jù)不同的場景靈活變通
????????其中 JDK 8 之前主要使用 EntrySet 和 KeySet 的遍歷方式,而 KeySet 的遍歷方式性能比較低贴浙,一般不推薦使用砂吞。然而在 JDK 8 之后遍歷方式就有了新的選擇,可以使用比較簡潔的 Lambda 遍歷崎溃,也可以使用性能比較高的 Stream 多線程遍歷蜻直。
1.JDK 8 之前的遍歷
? ??JDK 8 之前主要使用 EntrySet 和 KeySet 進行遍歷
? ? 1.1EntrySet遍歷
? ??????EntrySet 是早期 HashMap 遍歷的主要方法,其實現(xiàn)代碼如下:
? ??????
1.2 KeySet 遍歷
? ??KeySet 的遍歷方式是循環(huán) Key 內(nèi)容,再通過 map.get(key) 獲取 Value 的值概而,具體實現(xiàn)如下:
? ??
通過以上代碼呼巷,我們可以看出使用 KeySet 遍歷,其性能是不如 EntrySet 的赎瑰,因為 KeySet 其實循環(huán)了兩遍集合王悍,第一遍循環(huán)是循環(huán) Key,而獲取 Value 有需要使用 map.get(key)乡范,相當(dāng)于有循環(huán)了一遍集合配名,所以?KeySet 循環(huán)不能建議使用,因為循環(huán)了兩次晋辆,效率比較低渠脉。
1.3 EntrySet 迭代器遍歷(?使用迭代器刪除 ,推薦)
? ??????使用迭代器的優(yōu)點是可以在循環(huán)的時候瓶佳,動態(tài)的刪除集合中的元素芋膘。非迭代器的方式則不能在循環(huán)的過程中刪除元素(程序會報錯)。