Java中Map、HashMap和TableMap的區別與聯繫
1.Map是一個接口
java.util.Map
public interface Map<K,V>
是一種鍵-值對的數據結構
2.HashMap是一個Map的實現類
java.util.HashMap<K,V>
public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable
HashMap的數據結構
HashMap是哈希表的一種實現類,它是以數組爲鏈表頭一個二維鏈表,如圖
解決衝突的方式,就是在相同的地址上延伸鏈表,HashMap是非同步的,也就是說在單線程使用時用它,當然了,也可以採用一定的方式使它同步,另外HashMap的鍵和值都允許爲空,但是null鍵最多只能有一個。當用get()判斷某個鍵是否存在的時候有可能該鍵存在但值爲null,也可能是不存在該鍵,返回值爲null,所以當用HashMap是不能用get()的返回值來判斷該鍵是否存在,應該用containKeys(key)來判斷,如下圖。HashMap不包含contains()方法,它的哈希值每次都是重新計算的,鏈表頭組數的默認大小是16,而且一定是2的指數。
3.HashTable也實現了Map接口,但是繼承的類與HashMap不同
HashTable跟HashMap很相似,但是它線程是同步的,鍵不能爲空(會報空指針異常),HashTable直接使用對象的hashCode,HashTable中hash數組默認大小是11,增加的方式是 old*2+1,含有contains()方法,與containsValue()等效
參考:http://www.cnblogs.com/devinzhang/archive/2012/01/13/2321481.html