91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

如何進行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

汶川县| 江源县| 彩票| 台中县| 安顺市| 青浦区| 饶河县| 兰坪| 海盐县| 鲁甸县| 喀什市| 大余县| 商丘市| 望谟县| 田林县| 延长县| 子长县| 浪卡子县| 隆林| 拜城县| 巢湖市| 呼和浩特市| 府谷县| 定安县| 敦煌市| 双峰县| 勃利县| 榆中县| 岑溪市| 手游| 永丰县| 东丽区| 贡觉县| 丰城市| 屏山县| 藁城市| 威远县| 石嘴山市| 高青县| 平江县| 望谟县|