jdk1.8中Map遍歷3種方式,100萬數據性能測試報告

jdk1.8中Map遍歷3種方式,100萬數據性能測試報告

背景

程序員實戰開發中集合用的是非常非常多的,方法入參、數據轉換、出參等等.

學習目標

  • 搞清楚Map的迭代器iterator使用
  • 搞清楚Map3種迭代方式的性能

常見技巧

程序員開始學習啦,數據初始化準備

Map跟Set是對兄弟,很多特性都相同,請看下面分析

jdk1.8中Map遍歷3種方式,100萬數據性能測試報告

entrySet迭代方式

這裡只舉例子下面分析原理,while 或foreach只是語法變化了,本質還是通過迭代器

entrySet這名字看上去就是個Set

jdk1.8中Map遍歷3種方式,100萬數據性能測試報告

keySet迭代方式

jdk1.8中Map遍歷3種方式,100萬數據性能測試報告

values方式

jdk1.8中Map遍歷3種方式,100萬數據性能測試報告

-----------------源碼分析------------------------

jdk設計者非常的智慧,Map本來是沒有iterator方法的,設計者通過一個內部類EntrySet來讓Map擁有Set的能力

Map 、Set 都無序的,但Map是裝一對數據K,V,然後JDK設計者搞出了下面類型

Set>

包裝一下,就可以當Set用了。

jdk1.8中Map遍歷3種方式,100萬數據性能測試報告

通過繼承AbstractSet然後就有了set的特性,把key、value封裝到一個叫Map.Entry類中完美變身,

Entry是個內部對象

jdk1.8中Map遍歷3種方式,100萬數據性能測試報告

jdk1.8中Map遍歷3種方式,100萬數據性能測試報告

keySet思路差不多,請看我截圖源碼

jdk1.8中Map遍歷3種方式,100萬數據性能測試報告

迭代器方法都差不多,都是通過nextNode()取相應數據,注意接口Iterator

jdk1.8中Map遍歷3種方式,100萬數據性能測試報告

jdk1.8中Map遍歷3種方式,100萬數據性能測試報告

jdk1.8中Map遍歷3種方式,100萬數據性能測試報告

Set其實可以當Map來用,請看源碼

他的K就是Set的元素,V是固定的一個值Object

jdk1.8中Map遍歷3種方式,100萬數據性能測試報告

還有很多細節請程序員沒自己看JDK,

jdk1.8中Map遍歷3種方式,100萬數據性能測試報告

-----------性能測試報告------------------------

1萬數據

jdk1.8中Map遍歷3種方式,100萬數據性能測試報告

10萬數據

jdk1.8中Map遍歷3種方式,100萬數據性能測試報告

100萬數據

jdk1.8中Map遍歷3種方式,100萬數據性能測試報告

總結

  1. jdk1.8放心的用entrySet吧,性能測試非常完美。
  2. 把Map看成特殊的Set,把Set看成特殊的Map【原因看看源碼你就發現了】。

又get到新知識的,請關注啊

程序汪汪持續輸入


分享到:


相關文章: