hashmap基於map介面的非同步實現,允許null鍵和null值
此類不保證對映順序,不保證該順序永遠不變
hashmap的資料結構:
鍊錶和陣列的結合體
底層實現是乙個陣列,陣列的每一項就是乙個鍊錶,entry是乙個static class,其中包含key、value以及next,它的key和hash是final的
hashmap在容量總是2的n次方,h&(length-1)相當於對length取模,但是&比%更有效率,hash的計算
h=key.hashcode
h=h^(h>>16)
低位加入高位資訊
hashmap的get方法,沒,首根據hash的key計算hashcode,再根據key的equals方法在對應的鍊錶中找需要的元素
hashmap中元素越來越多的時候,hash衝突機率就會越來越高,為了提高查詢效率,就要對hashmap進行擴容,當hashmap中的元素個數超過陣列大小*loadfactor時,就會進行陣列擴容,loadfactor的預設值為0.75,陣列擴容大小為擴容2倍,負載因子越大,對空間利用更充分,但是查詢效率降低,如果負載因子過小,雜湊表過於稀疏,對空間造成嚴重浪費
hashmap不是執行緒安全的,如果在使用迭代器的過程中,有其他執行緒修改了map,將丟擲concurrentmodificationexception,就是所謂fail-fast策略
hashset實現原理:
它基於hashmap實現的,底層採用hashmap來儲存元素,所以相關hashset的操作都是使用hashmap底層方法,應該將儲存在hashset中的物件覆蓋hashcode和equals。因為hashset中包含的物件都是hashmap中的key,value都是present
hashtable 是乙個雜湊表,內容儲存的內容鍵值對,hashtable繼承於dictionary類,實現了map,hashtable是通過拉鍊法實現雜湊表的
linkedhashmap:
hashmap是無序的
linkedhashmap是hashmap的乙個子類,它保留插入的順序,如果需要輸出和輸入時的順序相同,可以按照插入順序或者訪問順序進行迭代
linkedhashset是通過linkedhashmap來實現的,繼承自hashset,
arraylist可以理解為動態陣列,實現了list介面,
linkedlist 基於鍊錶實現所以類中包含兩個指標,first和last,構成雙向鍊錶
HashMap實現原理
hashmap 的get 方法 呼叫get方法返回entry public v get object key getentry方法 final entrygetentry object key 對key int hash key null 0 hash key for entrye table in...
HashMap實現原理
資料結構中有陣列和鍊錶來實現對資料的儲存,但這兩者基本上是兩個極端。陣列儲存區間是連續的,占用記憶體嚴重,故空間複雜的很大。但陣列的二分查詢時間複雜度小,為o 1 陣列的特點是 定址容易,插入和刪除困難 鍊錶儲存區間離散,占用記憶體比較寬鬆,故空間複雜度很小,但時間複雜度很大,達o n 鍊錶的特點是...
HashMap實現原理
public v put k key,v value 如果i索引處的entry為null,表明此處還沒有entry。modcount 將key value新增到i索引處。addentry hash,key,value,i return null 從上面的源 中可以看出 當我們往hashmap中put...