Java集合類Hashtable實現細節

2021-07-30 18:34:56 字數 1339 閱讀 9050

hashtable的api對外提供了許多方法,這些方法能夠很好幫助我們操作hashtable,但是這裡我只介紹兩個最根本的方法:put、get。

首先我們先看put方法:將指定key對映到此雜湊表中的指定value

注意這裡鍵key和值value都不可為空。

put方法的整個處理流程是:計算key的hash值,根據hash值獲得key在table陣列中的索引位置,然後迭代該key處的entry鍊錶(我們暫且理解為鍊錶),若該鍊錶中存在乙個這個的key物件,那麼就直接替換其value值即可,否則在將改key-value節點插入該index索引位置處。如下:

首先我們假設乙個容量為5的table,存在8、10、13、16、17、21。他們在table中位置如下:

然後我們插入乙個數:put(16,22),key=16在table的索引位置為1,同時在1索引位置有兩個數,程式對該「鍊錶」進行迭代,發現存在乙個key=16,這時要做的工作就是用newvalue=22替換oldvalue16,並將oldvalue=16返回。

在put(33,33),key=33所在的索引位置為3,並且在該鍊錶中也沒有存在某個key=33的節點,所以就將該節點插入該鍊錶的第乙個位置。

注意:hashtable的擴容操作,在put方法中,如果需要向table中新增entry元素,會首先進行容量校驗,如果容量已經達到了閥值,hashtable就會進行擴容處理rehash()。

hashtable和hashmap存在很多的相同點,但是他們還是有幾個比較重要的不同點。

第一:我們從他們的定義就可以看出他們的不同,hashtable基於dictionary類,而hashmap是基於abstractmap。dictionary是什麼?它是任何可將鍵對映到相應值的類的抽象父類,而abstractmap是基於map介面的骨幹實現,它以最大限度地減少實現此介面所需的工作。

第二:hashmap可以允許存在乙個為null的key和任意個為null的value,但是hashtable中的key和value都不允許為null。

第三:hashtable的方法是同步的,而hashmap的方法不是。即是說hashtable是執行緒安全的,而hashmap是執行緒不安全的。

Java 集合類詳解

上述類圖中,實線邊框的是實現類,比如arraylist,linkedlist,hashmap等,折線邊框的是抽象類,比如abstractcollection,abstractlist,abstractmap等,而點線邊框的是介面,比如collection,iterator,list等。發現乙個特點,...

Java 集合類學習

繼承關係圖 1 list 有序 索引 可重複 list裡存放的物件是有序的,同時也是可以重複的,list關注的是索引,擁有一系列和索引相關的方法。arraylist 陣列 快速訪問 arraylist可以理解成乙個可增長的陣列,因此可以通過索引快速訪問。linkedlist 鍊錶 快速插入 刪除 l...

Java集合常用類

集合的兩個頂級介面分別為 單列集合collection 和 雙列集合map 單列集合 collection 和雙列集合 map 特點如下 一 collection 單列集合類的根介面,有兩個重要的子介面,即 list 和 set set 介面特點是元素無序並且不可重複,主要實現類有 hashset ...