JAVA 8 主要新特性 ----------------(二)版本中資料結構的修改淺析
阿新 • • 發佈:2018-12-03
一、版本中資料結構的修改淺析
1、HashMap、HashSet、ConcurrentHashMap的資料結構發生變化
(1)HashMap簡介(結構:雜湊表+連結串列)
HashMap儲存的資料是無序的,結構雜湊表加連結串列的儲存方式,key不能重複,雜湊表就是陣列,儲存的陣列都是entry,初始大小預設是16,HashMap底層使用雜湊演算法原理:當建立一個物件,想要加入到HashMap,會預設呼叫底層的一個方法hashCode()。
HashMap算出索引值,會上對應的連結串列中找是否有物件,如果沒有物件,沒有直接新增,如果有物件,通過equals比較兩個物件,如果內容一樣,將視為重複元素,後邊的將前邊的覆蓋掉.內容不一樣,JDK1.7中,不一樣的時候生成一個連結串列,後加入的跟前邊的生成連結串列,稱為"碰撞","碰撞"過多的時候,下次新增就會更多個值進行equals,效率會極低.如何避免?無法避免。
新版設計:
當HashMap中的某一個連結串列的長度大於8,並且元素總容量大於64的時候,連結串列就會變為二叉樹中的紅黑樹. 優勢:除了新增,其他的效率都提高了.1.8前新增的重複元素直接新增在連結串列最後,1.8中需要跟紅黑樹的子節點進行比較,最後找到合理的位置新增. 查詢提速,原來是遍歷整個連結串列,挨個比較查詢值.注:
雜湊演算法:
雜湊演算法是將hashCode()生成的值,進行一個運算(雜湊演算法運算),運算成對應的陣列的索引值,這就是雜湊演算法.