HashTable和HashMap的區別

2022-08-02 13:45:10 字數 1778 閱讀 7170

1.繼承父類不同

hashtable繼承自dictionary類,而hashmap繼承自abstractmap類;但二者都實現了map介面。

2.執行緒的安全性

1. hashtable是同步(方法中使用了synchronize)的;而hashmap是未同步(方法中預設synchronize)的。

2.hashtable 執行緒安全,因為它每個方法中都加入了synchronize,在多執行緒併發的環境下,可以直接使用hashtable,不需自己在加同步;

hashmap執行緒不安全,因為hashmap底層是乙個entry陣列,當發生hashmap衝突的時候,hashmap是採用鍊錶的方式來解決的,在對應的陣列位置存放鍊錶的頭結點。對鍊錶而言,新加入的節點會從頭結點加入。

3.是否有contains方法

1.hashtable有乙個contains(object value)方法,功能和containsvalue方法(object value)功能一樣。

2.hashmap把hashtable的contains方法去掉了,改成containsvalue和containskey。

4.可否允許有null值

key、value都是物件,但是不能擁有重複key值,value值可以重複出現。

1.hashtable中,key和value都不允許出現null值。

2.hashmap允許null值(key和value都可以),因為在hashmap中null可以作為健,而它對應的值可以有多個null。

5.遍歷方式內部實現不同

1.hashtable使用enumeration,hashmap使用iterator。

6.hash值不一樣

1.hashtable直接使用物件的hashcode,如下:

//hashcode是jdk根據物件的位址或者字串或者數字算出來的int型別的數值
int hash =key.hashcode();

int index = (hash & 0x7fffffff) % tab.length;

2.hashmap要重新計算key值和hash值,如下:

int hash =hash(k);

int i =indexfor(hash, table.length);

static

inthash(object x)

static

int indexfor(int h, int

length)

7.陣列初始化和擴容不同

1.hashtable中hash陣列預設大小是11,增加的方式是 arr*2+1。

2.hashmap中hash陣列的預設大小是16,而且一定是2的指數。

謝謝**!

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...