Map map=new HashMap 詳解


當code慢慢開始越敲越多的時候,就開始思考人生了~(捂臉)

當我coding  Map<String,Object> map=new HashMap<String,Object> 時,我敲下的是啥?

1.Map:即  Interface Map<K,V>  K - key的類型 V - value的類型

也就是說Map是一個接口,它的每個元素包含一個key對象和一個value對象(這兩個對象的類型可以不一樣)且在這兩個對象之間存在一種映射的對應關系,所以從Map集合中訪問元素時,只要指定了key就可以找到對應的value,因此key必須是唯一的不能重復,當key相同時,后面的value值會覆蓋之前的value值;

那Map既然是一個接口,那看一下Map定義的一些通用的方法:

V get(Object key)
返回指定鍵映射到的值,或者null此映射是否不包含鍵的映射。
int hashCode()
返回此映射的哈希碼值。
boolean isEmpty()
如果此映射不包含鍵 - 值映射,則返回true
Set<K> keySet()
返回Set此映射中包含的鍵的視圖。
V put(K key, V value)
將指定的值與此映射中的指定鍵相關聯(可選操作)。

  Map接口有很多實現類例如 TreeMapHashtableSortedMap,HashMap,這里只對HashMap進行介紹;

2.HashMap:即 Class HashMap<K,V>是基於哈希表的Map接口實現。此實現提供所有可選的映射操作,並允許 值和鍵。這個類不保證地圖的順序; 特別是,它不保證該順序會隨着時間的推移保持不變。

①.HashMap的數據結構

   在 Java 編程語言中,最基本的結構就是兩種,一個是數組,另外一個是指針(引用),HashMap 就是通過這兩個數據結構進行實現。HashMap實際上是一個“鏈表散列”的數據結構,即數組和鏈表的結合體。即HashMap 底層就是一個數組結構,數組中的每一項又是一個鏈表。當新建一個 HashMap 的時候,就會初始化一個數組。

概括一下就是:HashMap 在底層將 key-value 當成一個整體進行處理,這個整體就是一個 Entry 對象。HashMap 底層采用一個 Entry[] 數組來保存所有的 key-value 對,當需要存儲一個 Entry 對象時,會根據 hash 算法來決定其在數組中的存儲位置,在根據 equals 方法決定其在該數組位置上的鏈表中的存儲位置;當需要取出一個Entry 時,也會根據 hash 算法找到其在數組中的存儲位置,再根據 equals 方法從該位置上的鏈表中取出該Entry。

 ②.HashMap兩個影響其性能的參數:初始容量和負載因子。 

    容量是在哈希表中桶的數量,初始容量是簡單地在創建哈希表中的時間的能力。負載因子衡量的是一個散列表的空間的使用程度,負載因子越大表示散列表的裝填程度越高,反之愈小。當哈希表中的條目數超過加載因子和當前容量的乘積時,哈希表將被重新哈希(即,重建內部數據結構),以便哈希表具有大約兩倍的桶數。作為一般規則,默認加載因子(0.75)在時間和空間成本之間提供了良好的權衡。較高的值會減少空間開銷,但會增加查找成本(反映在HashMap類的大多數操作中 ,包括getput)。在設置其初始容量時,應考慮映射中的預期條目數及其加載因子,以便最小化重新散列操作的數量。如果初始容量大於最大條目數除以加載因子,則不會發生重新加載操作。

③.既然HashMap實現了Map接口,那就一定要實現所有的接口的所有方法,所以此處就不寫啦~

如下是簡單的例子:

 

 Map<String, Object> map = new HashMap<String, Object>();//創建Map對象 Object是所有類型的父類 map.put("publish", publish);//存儲key和value map.put("status", status);
map.get("publish");//獲取相應key的值

 

大家也可以參考這篇文章詳細了解HashMap的實現原理:http://wiki.jikexueyuan.com/project/java-collection/hashmap.html

關於MapHashMap大家也可以看看官網(可直接點擊),希望這篇文章能對大家有所幫助。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM