Map集合的特點 1、Map集合中保存的都是鍵值對,鍵和值是一一對應的 2、一個映射不能包含重覆的值 3、每個鍵最多只能映射到一個值上 Map介面和Collection介面的不同 Map是雙列集合的根介面,Collection是單列集合的根介面 1、Map是雙列的(是雙列集合的根介面),Collec ...
Map集合的特點
1、Map集合中保存的都是鍵值對,鍵和值是一一對應的
2、一個映射不能包含重覆的值
3、每個鍵最多只能映射到一個值上
Map介面和Collection介面的不同
Map是雙列集合的根介面,Collection是單列集合的根介面
1、Map是雙列的(是雙列集合的根介面),Collection是單列的(是單列集合的根介面)
2、Map的鍵是唯一的,Collection的子介面Set是唯一的
3、Map集合的數據結構值針對鍵有效,跟值無關;如:TreeMap:鍵是用二叉樹演算法,HashMap:鍵是hash演算法, Collection集合的數據結構是針對元素有效
Map集合的遍歷方式
package com.jd.text; import java.util.Collection; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; import java.util.Set; public class Demo06 { public static void main(String[] args) { // 創建map集合 Map map = new HashMap<>(); // 添加 將指定的值與此映射中的指定鍵關聯 map.put("張三", 12); map.put("李四", 13); map.put("蔡文姬", 14); map.put("王五", 15); // 刪除 如果存在一個鍵的映射關係,則將其從此映射中移除 map.remove("王五"); // map.clear();//刪除全部 從此映射中移除所有映射關係 // 根據指定的key獲取對應的value Object obj1 = map.get("張三"); System.out.println(obj1); // 是否包含指定的key,包含返回true,不包含返回false。 boolean b = map.containsKey("張三"); System.out.println(b); // 是否包含指定的value,包含返回true,不包含返回false。 boolean c = map.containsValue(13); System.out.println(c); System.out.println("******************************"); // map集合的遍歷,通過keyset()方法(迭代器) Set keySet = map.keySet(); Iterator iter = keySet.iterator(); while (iter.hasNext()) { Object key = iter.next(); Object value = map.get(key); System.out.println(key + ":" + value); } System.out.println("******************************"); // map集合的遍歷,通過keyset()方法(foreach) Set keySet2 = map.keySet(); for (Object key : keySet2) { Object value = map.get(key); System.out.println(key + ":" + value); } System.out.println("******************************"); // map集合的遍歷,通過entrySet()方法(foreach) Set entrySet = map.entrySet(); for (Object obj3 : entrySet) { Entry e = (Entry) obj3; Object key = e.getKey(); Object value = e.getValue(); System.out.println(key + ":" + value); } System.out.println("******************************"); // map集合的values方法,獲取到的map集合的value的值組成的collection集合 Collection coll = map.values(); for (Object obj : coll) { System.out.println(obj); } } }
運行結果:
12 true true ****************************** 李四:13 張三:12 蔡文姬:14 ****************************** 李四:13 張三:12 蔡文姬:14 ****************************** 李四:13 張三:12 蔡文姬:14 ****************************** 13 12 14
TreeMap集合保存自定義對象
package com.jd.text;
import java.util.Set;
import java.util.TreeMap;
/*
* TreeMap保存自定義對象,比較的Comparable和Comparator兩種方式
* 1.通過實現Comparable介面,重寫compareTo()方法。
*/
public class Demo07 {
public static void main(String[] args) {
TreeMap map=new TreeMap<>();
map.put(new User("張三01", 12),11);
map.put(new User("張三01", 10),11);
map.put(new User("張三02", 13),11);
map.put(new User("張三01", 12),11);
//通過重寫hashCode()和equals(Object obj)方法防止重覆的值存入
Set set = map.keySet();
for (Object key : set) {
Object value = map.get(key);
System.out.println(key + ":" + value);
}
}
}
package com.jd.text; /* * 通過實現Comparable介面,重寫compareTo()方法。 */ public class User implements Comparable{ private String name; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "User [name=" + name + ", age=" + age + "]"; } public User(String name, int age) { super(); this.name = name; this.age = age; } public User() { super(); } @Override public int hashCode() { final int prime=31; int result=1; result=prime*result+age; result=prime*result+((name==null)?0:name.hashCode()); return result; } @Override public boolean equals(Object obj) { if(this==obj) return true; if(obj==null) return false; if(getClass()!=obj.getClass()) return false; User user=(User) obj; if(age!=user.age) return false; if(name==null){ if(user.name!=null) return false; }else if(!name.equals(user.name)) return false; return true; } @Override public int compareTo(Object o) { if(o instanceof User){ User user=(User) o; int sum=name.compareTo(user.name); if(sum==0) return age-user.age; return sum; } throw new ClassCastException("不是User類型"); } }
運行結果:
User [name=張三01, age=10]:11 User [name=張三01, age=12]:11 User [name=張三02, age=13]:11
package com.jd.text; /* * TreeMap保存自定義對象,比較的Comparable和Comparator兩種方式 * 2.自己構造比較器實現Comparator介面,重寫compare(Object o1, Object o2)方法 */ import java.util.Comparator; import java.util.Set; import java.util.TreeMap; public class Demo08 { public static void main(String[] args) { TreeMap map=new TreeMap(new MyCompare()); map.put(new User2("張三01", 12),11); map.put(new User2("張三01", 10),11); map.put(new User2("張三02", 13),11); map.put(new User2("張三01", 12),11); //通過重寫hashCode()和equals(Object obj)方法防止重覆的值存入 Set set = map.keySet(); for (Object key : set) { Object value = map.get(key); System.out.println(key + ":" + value); } } } class User2{ String name; int age; public User2(String name,int age){ this.name=name; this.age=age; } @Override public int hashCode(){ final int prime=31; int result=1; result=prime*result+age; result=prime*result+((name==null)?0:name.hashCode()); return result; } @Override public boolean equals(Object obj){ if(this==obj) return true; if(obj==null) return false; if(getClass()!=obj.getClass()) return false; User2 u=(User2) obj; if(age!=u.age) return false; if(name==null){ if(u.name!=null) return false; }else if(!name.equals(u.name)) return false; return true; } @Override public String toString() { return "User2 [name=" + name + ", age=" + age + "]"; } } //比較器 class MyCompare implements Comparator{ @Override public int compare(Object o1, Object o2) { if(o1 instanceof User2 && o2 instanceof User2){ User2 u1=(User2) o1; User2 u2=(User2) o2; int sum=u1.age-u2.age; if(sum==0){ return u1.name.compareTo(u2.name); } return sum; } throw new ClassCastException("不是User2 類型"); } }
運行結果:
User2 [name=張三01, age=10]:11 User2 [name=張三01, age=12]:11 User2 [name=張三02, age=13]:11