java中的Map、HashMap、HashTable

JavaMap、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>,                                    CloneableSerializable

 

HashMap的數據結構

HashMap是哈希表的一種實現類,它是以數組爲鏈表頭一個二維鏈表,如圖



 解決衝突的方式,就是在相同的地址上延伸鏈表,HashMap是非同步的,也就是說在單線程使用時用它,當然了,也可以採用一定的方式使它同步,另外HashMap的鍵和值都允許爲空,但是null鍵最多只能有一個。當用get()判斷某個鍵是否存在的時候有可能該鍵存在但值爲null,也可能是不存在該鍵,返回值爲null,所以當用HashMap是不能用get()的返回值來判斷該鍵是否存在,應該用containKeys(key)來判斷,如下圖。HashMap不包含contains()方法,它的哈希值每次都是重新計算的,鏈表頭組數的默認大小是16,而且一定是2的指數。

 

3.HashTable也實現了Map接口,但是繼承的類與HashMap不同

HashTableHashMap很相似,但是它線程是同步的,鍵不能爲空(會報空指針異常),HashTable直接使用對象的hashCodeHashTablehash數組默認大小是11,增加的方式是 old*2+1,含有contains()方法,與containsValue()等效

 

參考:http://www.cnblogs.com/devinzhang/archive/2012/01/13/2321481.html

發佈了38 篇原創文章 · 獲贊 2 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章