Hash底層原始碼分析

2021-08-13 23:48:28 字數 1113 閱讀 5419

hsah:雜湊將乙個任意長度通過某種(函式函式演算法)轉換成乙個固定值,通過hash出來的值,通過只定位到map,key-value 基本原理。

/**

* hashtable是基於map介面的實現。這個版本的實現提供了所有map操作的實現並且允許null值和null鍵

* 除了允許空值(null)和不支援同步,hashmap和hashtable沒有什麼區別

* hashmap不保證有序,尤其是不保證順序隨時間不變

* 該實現提供常數時間的get、put操作,假設hash函式使元素均勻分布在bucket中。

*  *乙個hashmap例項有兩個引數會影響效能:初始容量(initialcapacity)和裝載因子(load factor)

*capacity是hashtable的桶數目,初始容量僅僅只是建立時的容量

*裝載因子是衡量雜湊表自動增長前裝滿的程度

*當雜湊表中鍵值對的數目超出容量與裝載因子之積,雜湊表就會重新雜湊(rehashed)(即,內部資料結構會重建)為之前容量的兩倍

*  *通常,預設的裝載因子0.75可以在時間和空間之間有很好的權衡,想避免重新hash的時間開銷,可以設定比較大的初始容量

*太多關鍵字的hashcode()相同也會導致效能下降,hashmap實現使用關鍵字之間的比較順序來平衡

*  *要特別注意hashmap實現不支援同步。如果有多個執行緒同步訪問乙個hashmap,並且乙個以上的執行緒會修改hashmap結構,則需要外部同步;(結構修改是指新增或移除鍵值對,僅僅修改value值不是結構修改操作)

*如果沒有這樣的物件,map需要由collections.synchronizedmap()方法包裝 ,而且最好在map建立時完成,以防意外的非同步訪問

* 非同步訪問map:

*   mapm = collections.synchronizedmap(new hashmap(...));

*

*hashmap類所有集合檢視返回的迭代器都是「fail-fast」:迭代器建立之後修改map結構,除了使用迭代器自己的remove方法,其他都會丟擲concurrentmodificationexception異常

* 但這種行為也不能保證同步不出錯

*/  

ArrayQueue底層原始碼分析

public class arrayqueue extends abstractlist 用於建立陣列,為泛型,通過指定的資料型別強制轉變,生成需要的陣列 private t newarray int size 擴容 首先需要計算一下原有的陣列大小為多少,即size的值 判斷擴容大小和原有陣列大小的...

HashMap底層原始碼分析

static final int default initial capacity 1 4 aka 16表示1向左移4位,2的4次方 static final int maximum capacity 1 30 hashmap陣列的最大容量 static final float default lo...

參考HashMap底層原始碼手擼hashMap

package io.renren public class exthashmapimplements extmap 2.判斷陣列是否需要擴容 3.計算hash指定位置 int index getindex key,default iniital capacity nodekvnode table ...