java--集合--Map集合
阿新 • • 發佈:2021-06-15
- Map介面常用方法
- Map介面的特點
-
package com.model.map; import java.util.*; /** * @Description:測試類 * @Author: 張紫韓 * @Crete 2021/6/13 17:40 */ public class MapDemo01 { public static void main(String[] args) { /** * Map介面實現類的特點,使用實現類HashMap例項 * 1) Map與Collection並列存在。用於儲存具有對映關係的資料:Key-Value * 2) Map中的key和value 可以是任何引用型別的資料,會封裝到HashMap$Node物件中 Node靜態內部類 * 3) Map中的key不允許重複,原因和HashSet一樣,前面分析過原始碼. * 4) Map中的value可以重複 * 5) Map的key可以為null, value也可以為null ,注意key為null,只能有一個, * value為null ,可以多個. * 6)常用String類作為Map的key * 7) key和value之間存在單向一對一關係,即通過指定的 * key總能找到對應的value * *
-
-
Map存放資料是Key-Value的,一對K-V是存放在Node中的,又因為Node實現了Entry介面,Entry存放在在EntrySet中,我們可以通過EntrySet的getKey(),getValue(),進行遍歷 ,也可以通過hashMap.KeySet()和hashMap.values()的到EntrySet中所有的key的集合和所有Value的集合,EntrySet存放的Entry型別但是裡存放的資料實際型別是HashMap$Node型別
-
package com.model.map; import java.util.Collection; import java.util.HashMap; import java.util.Map; import java.util.Set; /** * @Description:測試類 * @Author: 張紫韓 * @Crete 2021/6/14 15:23 */ public class MapDemo02 { //Map存放的資料是Key-Value 的鍵值對,存放在Table表中的Node靜態內部類中(HashMap$Node), //為了方便遍歷,我們在內部將 存放資料的Node類,封裝一個,轉為 Entry介面(為什麼能轉,因為Node類實現了Entry介面中)
-
Map體系繼承圖
-
Map介面的常用方法
-
Map介面的遍歷方法
-
package com.model.map; import java.util.*; /** * @Description:測試類 * @Author: 張紫韓 * @Crete 2021/6/14 17:18 */ public class MapDemo04 { public static void main(String[] args) { HashMap<Object, Object> map = new HashMap<>(); for (int i = 0; i < 10; i++) { map.put(new Integer(i), new Integer(i)); } /** * 第一組:取出所有的key * keySet()方法 * */ Set<Object> keySet = map.keySet(); // (1)增強for迴圈 for (Object key:keySet){ System.out.println("增強for迴圈"+key+"-"+map.get(key)); } // (2)迭代器 Iterator<Object> iterator = keySet.iterator(); while (iterator.hasNext()) { Object next = iterator.next(); System.out.println("迭代器方式"+next+"-"+map.get(next)); } /** * * 第二組:取出所有的Values * values()方法 * */ Collection<Object> values = map.values(); //(1)增強for迴圈 for (Object o:values){ System.out.println("增強for:"+o); } //(2)迭代器 Iterator<Object> iterator1 = values.iterator(); while (iterator1.hasNext()) { Object next = iterator1.next(); System.out.println("迭代器:"+next); } /** * * 第三組:使用EntrySet,的getKey()和getValue()方法實現遍歷 * */ Set<Map.Entry<Object, Object>> entrySet = map.entrySet(); // (1)增強for迴圈 for (Map.Entry entry:entrySet){ System.out.println(entry.getKey()+"-"+entry.getValue()); } // (2)迭代器 Iterator<Map.Entry<Object, Object>> iterator2 = entrySet.iterator(); while (iterator2.hasNext()) { Map.Entry<Object, Object> next = iterator2.next(); System.out.println(next.getKey()+""+next.getValue()); } } }
-
Map介面課堂練習
-
package com.model.map; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Set; /** * @Description:測試類 * @Author: 張紫韓 * @Crete 2021/6/14 17:59 */ public class MapDemo05 { public static void main(String[] args) { Employee employee01 = new Employee("001", "a", 10000.0f); Employee employee02 = new Employee("002", "b", 20000.0f); Employee employee03 = new Employee("003", "c", 30000.0f); Map<Object, Object> hashMap = new HashMap<>(); hashMap.put(employee01.getId(),employee01); hashMap.put(employee02.getId(),employee02); hashMap.put(employee03.getId(),employee03); Set<Object> keySet = hashMap.keySet(); System.out.println("*********第一種*********"); for (Object key:keySet){ Employee employee = (Employee) hashMap.get(key); if (employee.getSal()>18000){ System.out.println(employee); } } System.out.println("*********第二種**********"); Iterator<Object> iterator = keySet.iterator(); while (iterator.hasNext()) { Object next = iterator.next(); Employee employee = (Employee) hashMap.get(next); if (employee.getSal()>18000){ System.out.println(employee); } } System.out.println("***********第三種**********"); Set<Map.Entry<Object, Object>> entrySet = hashMap.entrySet(); for (Map.Entry entry:entrySet){ Employee employee = (Employee) entry.getValue(); if (employee.getSal()>18000){ System.out.println(employee); } } System.out.println("***********第四種**********"); Iterator<Map.Entry<Object, Object>> iterator1 = entrySet.iterator(); while (iterator1.hasNext()) { Map.Entry<Object, Object> next = iterator1.next(); Employee employee = (Employee) next.getValue(); if (employee.getSal()>18000){ System.out.println(employee); } } /** * 通過得到所有的key (hashMap.KeySet()) * 通過得到所有的value (hashMao.Values()) * 通過的到所有的Entry<K,V> (Hash.entrySet()) * * */ } } class Employee{ private String id; private String name; private Float sal; @Override public String toString() { return "Employee{" + "id='" + id + '\'' + ", name='" + name + '\'' + ", sal=" + sal + '}'; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Float getSal() { return sal; } public void setSal(Float sal) { this.sal = sal; } public Employee(String id, String name, Float sal) { this.id = id; this.name = name; this.sal = sal; } }
-
HashMap階段小結
-
- Map介面的特點