Map接口---Day20

Map接口概述:java

  現實生活中,咱們常會看到這樣的一種集合:IP地址與主機名,身份證號與我的,系統用戶名與系統用戶對象等, 這種一一對應的關係,就叫作映射。Java提供了專門的集合類用來存放這種對象關係的對象,即 java.util.Map 接口ide

Map接口與Collection接口的區別:this

  

  Collection 中的集合,元素是孤立存在的(能夠理解爲單身),向集合中存儲元素採用一個個元素的方式存儲。 spa

  Map 中的集合,元素是成對存在的(能夠理解爲夫妻)。每一個元素由鍵與值兩部分組成,經過鍵能夠找對所對應的 值。 code

  Collection 中的集合稱爲單列集合, Map 中的集合稱爲雙列集合。 對象

  須要注意的是,Map 中的集合不能包含重複的鍵,值能夠重複;每一個鍵只能對應一個值。blog

Map經常使用子類:接口

  HashMap:存儲數據採用的哈希表結構,元素的存取順序不能保證一致。因爲要保證鍵的惟1、不重複,需 要重寫鍵的hashCode()方法、equals()方法。 rem

  LinkedHashMap:HashMap下有個子類LinkedHashMap,存儲數據採用的哈希表結構+鏈表結構。經過鏈 表結構能夠保證元素的存取順序一致;經過哈希表結構能夠保證的鍵的惟1、不重複,須要重寫鍵的 hashCode()方法、equals()方法。get

Map接口中的經常使用方法

  Map接口中定義了不少方法,經常使用的以下:

    public V put(K key, V value) : 把指定的鍵與指定的值添加到Map集合中。

    public V remove(Object key) : 把指定的鍵 所對應的鍵值對元素 在Map集合中刪除,返回被刪除元素的 值。

    public V get(Object key) 根據指定的鍵,在Map集合中獲取對應的值。

    public Set<K> keySet() : 獲取Map集合中全部的鍵,存儲到Set集合中。

    public Set<Map.Entry<K,V>> entrySet() : 獲取到Map集合中全部的鍵值對對象的集合(Set集合)。

 1 package demosummary.map;  2 
 3 import java.util.HashMap;  4 import java.util.Map;  5 import java.util.Set;  6 
 7 /**
 8  * public V put(K key, V value) : 把指定的鍵與指定的值添加到Map集合中。  9  * 10  *     public V get(Object key) 根據指定的鍵,在Map集合中獲取對應的值。 11  *      12  * public V remove(Object key) : 把指定的鍵所對應的鍵值對元素在Map集合中刪除,返回被刪除元素的值。 13  * 14  *     public Set<K> keySet() : 獲取Map集合中全部的鍵,存儲到Set集合中。 15  * 16  *     public Set<Map.Entry<K,V>> entrySet() : 獲取到Map集合中全部的鍵值對對象的集合(Set集合)。 17  */
18 public class MapMethods { 19     public static void main(String[] args) { 20         /**
21  * public V put(K key, V value) : 把指定的鍵與指定的值添加到Map集合中。 22          */
23         //建立map集合
24         HashMap<String, String> map = new HashMap<>(); 25         //添加元素
26         map.put("蠻王", "艾希"); 27         map.put("蓋倫", "卡特琳娜"); 28         map.put("卡牌", "寡婦"); 29         //打印map集合
30         System.out.println(map);//{卡牌=寡婦, 蠻王=艾希, 蓋倫=卡特琳娜}
31 
32         /**
33  * public V get(Object key) 根據指定的鍵,在Map集合中獲取對應的值。 34          */
35         String result = map.get("蠻王"); 36         System.out.println(result);//艾希
37 
38         /**
39  * public V remove(Object key) : 把指定的鍵所對應的鍵值對元素在Map集合中刪除,返回被刪除元素的值。 40          */
41         String result1 = map.remove("蠻王"); 42         System.out.println(result1);//艾希
43         System.out.println(map);//{卡牌=寡婦, 蓋倫=卡特琳娜}
44 
45         /**
46  * public Set<K> keySet() : 獲取Map集合中全部的鍵,存儲到Set集合中。 47          */
48         Set<String> set = map.keySet(); 49         System.out.println(set);//[卡牌, 蓋倫]
50 
51         /**
52  * public Set<Map.Entry<K,V>> entrySet() : 獲取到Map集合中全部的鍵值對對象的集合(Set集合)。 53          */
54         Set<Map.Entry<String, String>> set1 = map.entrySet(); 55         System.out.println(set1);//[卡牌=寡婦, 蓋倫=卡特琳娜]
56 
57  } 58 }

    注意:使用put方法時,若指定的鍵(key)在集合中沒有,則沒有這個鍵對應的值,返回null,並把指定的鍵值添加到 集合中;若指定的鍵(key)在集合中存在,則返回值爲集合中鍵對應的值(該值爲替換前的值),並把指定鍵所對應的值,替換成指定的新值。

Map集合遍歷鍵找值方式

  鍵找值方式:即經過元素中的鍵,獲取鍵所對應的值

    分析步驟:
      1. 獲取Map中全部的鍵,因爲鍵是惟一的,因此返回一個Set集合存儲全部的鍵。方法提示: keyset()

      2. 遍歷鍵的Set集合,獲得每個鍵。

      3. 根據鍵,獲取鍵所對應的值。方法提示: get(K key)

 1 package demosummary.map;  2 
 3 import java.util.HashMap;  4 import java.util.Set;  5 
 6 public class MapFor {  7     /**
 8  * 鍵找值方式:即經過元素中的鍵,獲取鍵所對應的值  9  * 分析步驟: 10  * 1. 獲取Map中全部的鍵,因爲鍵是惟一的,因此返回一個Set集合存儲全部的鍵。方法提示: keyset() 11  * 2. 遍歷鍵的Set集合,獲得每個鍵。 12  * 3. 根據鍵,獲取鍵所對應的值。方法提示: get(K key) 13      */
14     public static void main(String[] args) { 15         //建立map集合
16         HashMap<String, String> map = new HashMap<>(); 17         //添加元素
18         map.put("蠻王", "艾希"); 19         map.put("德瑪", "卡特琳娜"); 20         map.put("卡牌", "寡婦"); 21         //獲取鍵
22         Set<String> keys = map.keySet(); 23         //遍歷鍵
24         for (String key : keys) { 25             //經過鍵獲取值
26             String s = map.get(key); 27  System.out.println(s); 28             /**
29  * 運行結果 30  * 寡婦 31  * 卡特琳娜 32  * 艾希 33              */
34  } 35  } 36 }

Entry鍵值對對象

  咱們已經知道, Map 中存放的是兩種對象,一種稱爲key(鍵),一種稱爲value(值),它們在在 Map 中是一一對應關 系,這一對對象又稱作 Map 中的一個 Entry(項) 。 Entry 將鍵值對的對應關係封裝成了對象。即鍵值對對象,這 樣咱們在遍歷 Map 集合時,就能夠從每個鍵值對( Entry )對象中獲取對應的鍵與對應的值。

  方法:

    public K getKey() :獲取Entry對象中的鍵。

    public V getValue() :獲取Entry對象中的值。 

  在Map集合中也提供了獲取全部Entry對象的方法: 

    public Set<Map.Entry<K,V>> entrySet() : 獲取到Map集合中全部的鍵值對對象的集合(Set集合)。 

  操做步驟與圖解:
    1. 獲取Map集合中,全部的鍵值對(Entry)對象,以Set集合形式返回。方法提示: entrySet() 。

    2. 遍歷包含鍵值對(Entry)對象的Set集合,獲得每個鍵值對(Entry)對象

    3. 經過鍵值對(Entry)對象,獲取Entry對象中的鍵與值。  方法提示: getkey() getValue()

 1 package demosummary.map;  2 
 3 import java.util.HashMap;  4 import java.util.Map;  5 import java.util.Set;  6 
 7 public class MapEntry {  8     public static void main(String[] args) {  9         //建立map集合
10         HashMap<String, String> map = new HashMap<>(); 11         //添加元素
12         map.put("蠻王", "艾希"); 13         map.put("德瑪", "卡特琳娜"); 14         map.put("卡牌", "寡婦"); 15         //獲取entry對象
16         Set<Map.Entry<String, String>> entrySet = map.entrySet(); 17         //遍歷獲得entry對象
18         for (Map.Entry<String, String> es : entrySet) { 19             String key = es.getKey(); 20             String value = es.getValue(); 21             System.out.println(key + "的CP是" + value); 22             /**
23  * 執行結果 24  * 卡牌的CP是寡婦 25  * 德瑪的CP是卡特琳娜 26  * 蠻王的CP是艾希 27              */
28  } 29  } 30 }

HashMap存儲自定義類型鍵值

  

 1 package demosummary.map;  2 
 3 import java.util.HashMap;  4 import java.util.Objects;  5 import java.util.Set;  6 
 7 public class MapStudent {  8     private String name;  9     private Integer age; 10 
11     public MapStudent() { 12  } 13 
14     public MapStudent(String name, Integer age) { 15         this.name = name; 16         this.age = age; 17  } 18 
19     public String getName() { 20         return name; 21  } 22 
23     public void setName(String name) { 24         this.name = name; 25  } 26 
27     public Integer getAge() { 28         return age; 29  } 30 
31     public void setAge(Integer age) { 32         this.age = age; 33  } 34 
35  @Override 36     public boolean equals(Object o) { 37         if (this == o) return true; 38         if (o == null || getClass() != o.getClass()) return false; 39         MapStudent that = (MapStudent) o; 40         return Objects.equals(name, that.name) &&
41  Objects.equals(age, that.age); 42  } 43 
44  @Override 45     public int hashCode() { 46         return Objects.hash(name, age); 47  } 48 
49  @Override 50     public String toString() { 51         return "MapStudent{" +
52                 "name='" + name + '\'' +
53                 ", age=" + age +
54                 '}'; 55  } 56 
57     public static void main(String[] args) { 58         //建立HashMap集合對象
59         HashMap<MapStudent, String> map = new HashMap<>(); 60         //添加元素
61         map.put(new MapStudent("A", 20),"北京"); 62         map.put(new MapStudent("B", 21),"上海"); 63         map.put(new MapStudent("C", 22),"深圳"); 64         map.put(new MapStudent("D", 20),"廣州"); 65         //獲取keySet對象
66         Set<MapStudent> ms = map.keySet(); 67         //遍歷獲得的Key
68         for (MapStudent m : ms) { 69             String s = map.get(m); 70  System.out.println(s); 71  } 72         /**
73  * 執行結果 74  * 廣州 75  * 北京 76  * 上海 77  * 深圳 78          */
79  } 80 }

 LinkedHashMap 

  LinkedHashMap能夠保證存進去的元素有序,由於在HashMap下面有一個子類LinkedHashMap,它是鏈表和哈希表組合的一個數據存儲結構

 1 package demosummary.map;  2 
 3 import java.util.LinkedHashMap;  4 import java.util.Map;  5 import java.util.Set;  6 
 7 public class LinkedMapDemo {  8     public static void main(String[] args) {  9         //建立LinkedHashMap集合
10         LinkedHashMap<String, String> map = new LinkedHashMap<>(); 11         //添加元素
12         map.put("蠻王", "艾希"); 13         map.put("德瑪", "卡特琳娜"); 14         map.put("卡牌", "寡婦"); 15         //獲取entrySet對象
16         Set<Map.Entry<String, String>> me = map.entrySet(); 17         //遍歷獲取的鍵
18         for (Map.Entry<String, String> sse : me) { 19             System.out.println(sse.getKey()+"=="+sse.getValue()); 20  } 21         /**
22  * 執行結果 23  * 蠻王==艾希 24  * 德瑪==卡特琳娜 25  * 卡牌==寡婦 26          */
27  } 28 }
相關文章
相關標籤/搜索