中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

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

临潭县| 常宁市| 黎平县| 武乡县| 枞阳县| 杭州市| 珲春市| 成安县| 崇信县| 徐闻县| 巴林右旗| 丽江市| 南丰县| 敦化市| 隆林| 蕲春县| 民丰县| 闸北区| 合山市| 盐山县| 万源市| 大姚县| 二连浩特市| 永胜县| 宜宾县| 荔浦县| 富源县| 德钦县| 化州市| 崇仁县| 肥东县| 巴彦淖尔市| 嘉荫县| 都兰县| 武定县| 通许县| 闵行区| 梧州市| 海伦市| 荔波县| 忻州市|