JAVA基礎學習總結,day15(Map集合)

Map 集合(雙列集合接口)

特點:
1.以鍵值對的形式存儲元素
2.通過鍵可以找到值
3.鍵是唯一的,值是可以重複的
4.Map集合的<k,v>泛型,是用來限制Map集合中的鍵的類型和值的類型常用子類:
HashMap:存儲數據採用的哈希表結構,元素的存取順序不能保證一致
由於要保證 鍵 的唯一、不重複,需要重寫 鍵的hashCode()方法、equals()方法。
LinkedhashMap<K,V>:HashMap下有個子類LinkedHashMap,存儲數據採用的哈希表結構+鏈表結構。
通過鏈表結構可以保證元素的存取順序一致;通過哈希表結構可以保證
鍵 的唯一,不重複,需要重寫鍵的hashCode()方法、equals()方法

Map集合常用的方法(必須掌握
public V put(K key, V value) : 往集合中添加鍵值對,放回之前該鍵對應的值
public V remove(Object key) : 根據鍵刪除該鍵對應的鍵值對,返回被刪除元素的 值。
public int size(): 獲取鍵值對的長度
boolean containsKey(Object key) 如果此映射包含對於指定鍵的映射關係,則返回 true。
boolean containsValue(Object value) 如果此映射將一個或多個鍵映射到指定值,則返回 true。
public V get(Object key) 根據指定的鍵獲取對應的值。
public collection values(): 獲取Map集合中所有的值,存儲到collection集合中
public Set keySet() : 獲取Map集合中所有的鍵,存儲到Set集合中。
public Set<Map.Entry<K,V>> entrySet() : 獲取到Map集合中所有的鍵值對對象的集合(Set集合)。

Map<K,V>:接口

  • K: 用來限制集合中鍵的數據類型
  • V: 用來限制集合中值的數據類型
  • Map集合中常用實現類的介紹:
  • HashMap:存儲元素的結構是哈希表結構,特點:鍵唯一,鍵值對的存取無序
  • LinkedHashMap:存儲元素的結構是鏈表+哈希表結構,特點:鍵唯一,鍵值對的存取有序
  • TreeMap:特點:鍵唯一,對鍵值對元素進行排序

Map集合的第一種遍歷方式
通過 鍵找值 的方式遍歷雙列集合
思路:
1.獲取該集合的所有建
2.遍歷所有的鍵的集合,得到每一個鍵
3.根據鍵找對應的值

HashMap<Integer,String> map=new HashMap<>();     
//往map集合中添加元素     
map.put(1,"張三");     
map.put(2,"李四");     
map.put(3,"王五");     
map.put(4,"錢六");     
map.put(5,"田七");     
//1.獲取該集合的所有鍵     
Set<Integer> keySet=map.keySet();     
//2.遍歷所有的鍵的集合,得到每一個鍵     
for(Integer key:keySet){     
//3.根據鍵找對應的值          
String value=map.get(key);          
Sytem.out.println(key+":"+value);     
}

Map集合的第二種遍歷方式:
通過 鍵值對對象 的方式遍歷雙列集合
思路:
1.獲取該集合的所有 鍵值對 對象
2.遍歷該鍵值對對象的Set集合,拿到每一個鍵值對對象
3.調用鍵值對對象的getKey()和getValue()方法獲取鍵和值
Map.Entry接口中的方法:
public K getKey(); 獲取Entry對象中的鍵
public V getValue; 獲取Entry對象中的值

// 創建一個Map集合,鍵的類型是:Integer,值的類型是String
Map<Integer, String> map = new HashMap<>();
// 往map集合中添加鍵值對
map.put(1, "張三");// 鍵值對是由2部分組成,一部分是鍵,一部分是值,鍵值是相互對立
map.put(2, "李四");
map.put(3, "王五");
map.put(4, "趙六");
// public Set<Map.Entry<K,V>> entrySet(): 獲取到Map集合中所有的 鍵值對對象 的集合(Set集合)
// entrySet()方法是用來獲取Map集合中所有的鍵值對對象,一個元素,鍵和值在一起了
// Entry將鍵值對的對應關係封裝成了對象。即鍵值對對象
// Set<Map.Entry<Integer, String>> set = map.entrySet();

// 第二種方法遍歷:根據鍵值對對象的方式遍歷Map集合
// 2.1 獲取該集合中所有的鍵值對對象
Set<Map.Entry<Integer, String>> entrySet = map.entrySet();
// 2.2 遍歷所有的鍵值對對象(Entry)for (Map.Entry<Integer, String> entry : entrySet) {    
//2.3 使用鍵值對象對象獲取鍵和值    
//2.4 獲取鍵    
Integer key  = entry.getKey();    
//  2.4 獲取值    
String value = entry.getValue();     
  System.out.println(key+"..."+value);}tem.sout.println(key+":"+value);      
}

HashMap集合保證鍵唯一的原理:依賴鍵的hashCode()和equals()方法

  1. 當HashMap集合要存儲鍵值對的時候,會調用鍵的hashCode方法計算該鍵對應的哈希值
  2. 判斷該哈希值對應的位置是是否有相同哈希值的鍵
  3. 如果該位置上沒有相同哈希值的鍵,那麼就直接存儲該鍵值對
  4. 如果該位置上有相同哈希值的鍵,那麼就產生了哈希衝突
  5. 如果產生了哈希衝突就會調用該鍵的equals方法,判斷該鍵與該位置上的所有的鍵是否相等,

如果該鍵與其中任何一個鍵相等,那麼就覆蓋之前的鍵值對
如果該鍵與其中任意一個鍵都不相等,那麼就存儲鍵值對

HashMap存儲自定義類型鍵值:保證鍵唯一,必須重寫鍵的hashCode()和equals()方法
LinkedHashMap存儲自定義類型鍵值:保證鍵唯一,必須重寫鍵的hashCode()和equals()方法 LinkedHashMap:是由哈希表保證鍵唯一,由鏈表保證元素存取有序
HashMap:是由哈希表保證鍵唯一
List,Set,Map集合都有一個靜態方法 of(),適合添加批量少量元素,並且創建出來的集合是不可以變的
jdk 9 對集合添加元素的優化:
Java 9,添加了幾種集合工廠方法,更方便創建少量元素的集合、map實例。
新的List、Set、Map的靜態工廠方法可以更方便地創建集合的不可變實例。

作用:適合添加少量元素
注意:

  1. of()方法只是Map,List,Set這三個接口的靜態方法,其父類接口和子類實現並沒有這類方法,比如 HashSet,ArrayList等待;
  2. 返回的集合是不可變的;
發佈了28 篇原創文章 · 獲贊 13 · 訪問量 1787
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章