[size=large]
1.hashtable是執行緒同步的,也是執行緒安全的。hashmap不是執行緒同步的,所以不是執行緒安全的。所以在多執行緒場合要手動同步hashmap這個區別就像vector和arraylist一樣。
2.hashtable不允許null值(key和value都不可以),hashmap允許null值(key和value都可以)。
3.hashtable有乙個contains(object value),功能和containsvalue(object value)功能一樣。
4.hashtable使用enumeration,hashmap使用iterator。
以上只是表面的不同,它們的實現也有很大的不同。
5.hashtable中hash陣列預設大小是11,增加的方式是 old*2+1。hashmap中hash陣列的預設大小是16,而且一定是2的指數。
6.雜湊值的使用不同,hashtable直接使用物件的hashcode,**是這樣的:
int hash = key.hashcode();
int index = (hash & 0x7fffffff) % tab.length;
而hashmap重新計算hash值,而且用與代替求模:
int hash = hash(k);
int i = indexfor(hash, table.length);
static int hash(object x)
static int indexfor(int h, int length)
[/size]
資料結構之HashTable與HashMap
首先介紹一下hashtable 與hashmap hashtable類實現乙個雜湊表,該雜湊表將鍵對映到相應的值。任何非 null 物件都可以用作鍵或值。hashmap是基於雜湊表的map 介面的實現。此實現提供所有可選的對映操作,並允許使用 null 值和 null 鍵。hashmap不保證對映的...
Java中HashTable和HashMap的區別
1 hashtable的方法是同步的,hashmap不同步,所以在多執行緒情況下,使用的是hashtable 2 hashtable不允許null值 key和value都不可以 hashmap允許null值 key和value都可以 3 hashtable有乙個contains 方法,功能和cont...
如何實現key, value有序的HashMap
想要寫個key,value有序的hashmap,出現效能問題,大家幫忙給個主意吧。b 先說下我的設計思路 b linkedhashmap裡面有乙個模擬的 雙向迴圈鍊錶 用來儲存entry的插入順序,我也可以採用這種方法來在插入的時候儲存key和value的有序。這裡暫定名為orderedhashma...