Map集合


1、Map集合的特點:

(1)每次存儲一對元素,即鍵值對(key,vlaue);

(2)key和value的數據類型可以相同,也可以不同;

(3)key不能重復,如果key相同,后面存儲的value會把前面的value覆蓋;

2、Map接口的實現類:

(1)HashMap:無序集合,存儲元素和取出元素的順序可能不一致;允許存儲null值、null鍵;

底層數據結構:哈希表

(2)LinkedHashMap:有序集合,存儲元素和取出元素的順序一直;

底層數據結構:哈希表+鏈表

3、哈希表數據結構(鏈表,數組結合體)

(1)特點:存儲、取出快;線程不安全,運行快;無序,沒有索引;不存儲重復元素。

(2)實現原理:(豎向代表數組,java中,數組的初始長度默認為16,加載因子默認為0.75,即存儲數據時,數組的長度達到16*0.75=12時,數組擴大為原來的兩倍(數組再哈希);橫向代表鏈表)

 

(3)存儲過程:添加一個鍵值對時,首先計算key的hash值,相同hash值的元素放在一個數組元素(例:a[0])中,形成鏈表,即一個數組元素中存放的是具有相同hash值的鏈表。

當鏈表的長度太長時,鏈表就轉為紅黑樹,這樣大大提高了查找的效率。

4、HashMap的方法:

(1)創建對象:Map<key的類型,value的類型> map=new HashMap<key的類型,value的類型>();

例:Map<String,Integer> map=new HashMap<String,Integer>();

(2)存儲元素:V  map.put(K,V);   一般情況下返回null,存儲重復鍵時,返回覆蓋之前的值;

(3)取出元素:V  map.get(K);  通過鍵,獲取值,如果集合中沒有這個鍵,返回null;

(4)移除元素: V  map.remove(K); 移除集合中的鍵值對,返回被移除之前的值;

(5)map集合遍歷:

方法一:利用鍵獲取值

調用map集合的方法keySet,將所有的鍵存儲到Set集合中,利用迭代器或增強for,遍歷Set集合,獲取Set集合中的所有元素(即map中的鍵),調用get方法,通過鍵獲取值

例:Set<Key類型> set=map.keySet();

Iterator<Key類型> it=set.iterator();

while(it.hasNext()){

  Key類型 key=it.next();

  Value類型 value=map.get(key);

}

方法二:利用鍵值對映射關系

調用map集合的方法entrySet,將集合中的映射關系對象存儲到set集合中,利用迭代器或增強for,遍歷Set集合,獲取Set集合中的所有元素(映射關系對象Map.Entry<K類型,V類型>),

通過映射關系對象的方法getKey(),getValue()獲取相應的Key和Value

例:Set<Map.Entry<K類型,V類型>> set=map.entrySet();

for(Map.Entry<K類型,V類型> entry:set){

  K類型 key=entry.getKey();

  V類型 value=entry.getValue();

}

5、Hashtable:Map的接口實現類,方法與HashMap一樣,

不同點:Hashtable:線程安全,運行速度慢;

        HashMap:線程不安全,運行速度快。


免責聲明!

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



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