亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何進行HashMap源碼分析

發布時間:2021-12-08 17:25:26 來源:億速云 閱讀:109 作者:柒染 欄目:大數據

這篇文章將為大家詳細講解有關如何進行HashMap源碼分析,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

代碼基于JDK 1.8

基數知識

Map是保存了Key-Value鍵值對的數據集合接口。HashMap是基于HashCode的Map實現。因為基于Key的HashCode進行存儲,所以HashMap中Key都是唯一的。

  • HashMap中Key,Value均可以為null。

源碼解析

類聲明

1
2
3
public class HashMap<K, V> extends AbstractMap<K,V> implements Map<K, V>, Cloneable, Serializable {
   // ...
}
  • Map - AbstractMap<K,V>本身實現了Map<K,V>接口,在這里再次強調了HashMap實現了Map

  • Cloneable 實現了克隆接口

  • Serializable 實現了序列化接口

數據結構

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/**
* table, 在初次使用時進行初始化, 必要時進行大小調整。
* 在分配大小時,長度總是 2的冪
*/
transient Node<K,V>[] table;


// Node靜態內部類,鏈表數據結構
static class Node<K, V> implements Map.Entry<K, V> {
   final int hash;
   final K key;
   V value;
   Node<K, V> next;
   Node(int hash, K key, V value, Node<K,V> next) {
       this.hash = hash;
       this.key = key;
       this.value = value;
       this.next = next;
   }
}

上面代碼描述了HashMap的底層數據結構:數組 + 鏈表

在1.8中,增加了紅黑樹,帶詳細研究…

構造函數

對于構造函數,提供了多個重載,以方便創建實例:

1
2
3
4
public HashMap()
public HashMap(int initialCapacity)
public HashMap(int initialCapacity, float loadFactor)
public HashMap(Map<? extends K, ? extends V> m)

在構造函數中,initialCapacityloadFactor兩個參數對map的性能有很大的影響。

  • initialCapacity: 初始化大小, 即table數組的長度,如果此值太小,可能會因引起table頻繁調整數組大小,如果太大,實際內容很少,則造成資源浪費,默認 1 << 4。

  • loadFactor: 加載因子,取值范圍(0,1)的浮點數,如果此值太小,可能會因引起table頻繁調整數組大小,如果太大,table大小很長時間不調整,調整時內容移動大。默認值0.75

1
i = (n - 1) & h;

計算key在table中的索引,h為key的hashcode,n為當前table的大小。

HashMap為非線程安全Map,其中key和value均可以為null。

關于如何進行HashMap源碼分析就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

桂阳县| 雷山县| 长丰县| 贵德县| 厦门市| 高清| 泾川县| 繁昌县| 容城县| 墨江| 广水市| 祁阳县| 库车县| 朝阳区| 鸡西市| 桃江县| 翁牛特旗| 青神县| 南京市| 长垣县| 大冶市| 日土县| 赣榆县| 南城县| 罗平县| 波密县| 泾源县| 柘荣县| 远安县| 合肥市| 平顺县| 甘谷县| 泸定县| 平江县| 高平市| 志丹县| 新邵县| 深水埗区| 龙川县| 黄骅市| 南澳县|