Hashtable和HashMap詳解與區別

2021-08-17 12:40:03 字數 1952 閱讀 4000

1.  關於hashmap的一些說法:

a)  hashmap實際上是乙個「鍊錶雜湊」的資料結構,即陣列和鍊錶的結合體。hashmap的底層結構是乙個陣列,陣列中的每一項是一條鍊錶。

b)  hashmap的例項有倆個引數影響其效能: 「初始容量」 和 裝填因子。

c)  hashmap實現不同步,執行緒不安全。  hashtable執行緒安全

d)  hashmap中的key-value都是儲存在entry中的。

e)  hashmap可以存null鍵和null值,不保證元素的順序恆久不變,它的底層使用的是陣列和鍊錶,通過hashcode()方法和equals方法保證鍵的唯一性

f)  解決衝突主要有三種方法:定址法,拉鍊法,再雜湊法。hashmap是採用拉鍊法解決雜湊衝突的。

注: 鍊錶法是將相同hash值的物件組成乙個鍊錶放在hash值對應的槽位;

用開放定址法解決衝突的做法是:當衝突發生時,使用某種探查(亦稱探測)技術在雜湊表中形成乙個探查(測)序列。 沿此序列逐個單元地查詢,直到找到給定 的關鍵字,或者碰到乙個開放的位址(即該位址單元為空)為止(若要插入,在探查到開放的位址,則可將待插入的新結點存人該位址單元)。

拉鍊法解決衝突的做法是: 將所有關鍵字為同義詞的結點鏈結在同乙個單鏈表中 。若選定的雜湊表長度為m,則可將雜湊表定義為乙個由m個頭指標組成的指標數 組t[0..m-1]。凡是雜湊位址為i的結點,均插入到以t[i]為頭指標的單鏈表中。t中各分量的初值均應為空指標。在拉鍊法中,裝填因子α可以大於1,但一般均取α≤1。拉鍊法適合未規定元素的大小。

2.  hashtable和hashmap的區別:

a)  繼承不同。

public class hashtable extends dictionary implements map

public class hashmap extends  abstractmap implements map

b)  hashtable中的方法是同步的,而hashmap中的方法在預設情況下是非同步的。在多執行緒併發的環境下,可以直接使用hashtable,但是要使用hashmap的話就要自己增加同步處理了。

c)  hashtable

中,key

和value

都不允許出現

null

值。 在

hashmap

中,null

可以作為鍵,這樣的鍵只有乙個;可以有乙個或多個鍵所對應的值為

null

。當get()

方法返回

null

值時,即可以表示 

hashmap

中沒有該鍵,也可以表示該鍵所對應的值為

null

。因此,在

hashmap

中不能由

get()

方法來判斷

hashmap

中是否存在某個鍵, 而應該用

containskey()

方法來判斷。

d)  兩個遍歷方式的內部實現上不同。hashtable、hashmap都使用了iterator。而由於歷史原因,hashtable還使用了enumeration的方式 。

e)  雜湊值的使用不同,hashtable直接使用物件的hashcode。而hashmap重新計算hash值。

f)  hashtable和hashmap它們兩個內部實現方式的陣列的初始大小和擴容的方式。hashtable中hash陣列預設大小是11,增加的方式是old*2+1。hashmap中hash陣列的預設大小是16,而且一定是2的指數。

注:  hashset子類依靠hashcode()和equal()方法來區分重複元素。

hashset內部使用map儲存資料,即將hashset的資料作為map的key值儲存,這也是hashset中元素不能重複的原因。而map中儲存key值的,會去判斷當前map中是否含有該key物件,內部是先通過key的hashcode,確定有相同的hashcode之後,再通過equals方法判斷是否相同。

Java中HashTable和HashMap的區別

1 hashtable的方法是同步的,hashmap不同步,所以在多執行緒情況下,使用的是hashtable 2 hashtable不允許null值 key和value都不可以 hashmap允許null值 key和value都可以 3 hashtable有乙個contains 方法,功能和cont...

資料結構之HashTable與HashMap

首先介紹一下hashtable 與hashmap hashtable類實現乙個雜湊表,該雜湊表將鍵對映到相應的值。任何非 null 物件都可以用作鍵或值。hashmap是基於雜湊表的map 介面的實現。此實現提供所有可選的對映操作,並允許使用 null 值和 null 鍵。hashmap不保證對映的...

Hashtable和Dictionary效能比較

在.net1.1裡經常會使用到hashtable,到裡.net 2.0以後我發現有了乙個很好用的idictionary實現類dictionary。但還是會擔心dictionary的檢索效率是否跟hashtable相當,據我了解arraylist的檢索效率是非常差的,binarysearch也不如ha...