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