JAVA集合——Map介面
阿新 • • 發佈:2018-12-11
package com.it.study; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.util.Collection; import java.util.Comparator; import java.util.HashMap; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.Map; import java.util.Properties; import java.util.Set; import java.util.TreeMap; /* * Map介面:儲存“鍵-值”對的資料 ----相當於高中的“函式y = f(x)” (x1,y1) (x2,y2) * >key是不可重複的,使用Set存放。value可以重複的,使用Collection來存放的。一個key-value對構成一個entry(Map.Entry),entry使用Set來存放。 * >新增、修改 put(Object key,Object value) 刪除remove(Object key) 獲取get(Object key) size() / keySet() values() entrySet() * |---HashMap:Map的主要的實現類,可以新增null鍵,null值 * |---LinkedHashMap:是HashMap的子類,可以按照新增進Map的順序實現遍歷 * |---TreeMap:需要按照key所在類的指定屬性進行排序。要求key是同一個類的物件。對key考慮使用自然排序 或 定製排序 * |---Hashtable:是一個古老的實現類,幾乎廢棄使用,執行緒安全的,不可以新增null鍵,null值不建議使用。 * |---子類:Properties:常用來處理屬性檔案*/ import org.junit.jupiter.api.Test; public class TestMap { //使用Properties處理屬性檔案 @Test public void test6() throws FileNotFoundException, IOException { Properties pros = new Properties(); pros.load(new FileInputStream(new File("jdbc.properties"))); String user = pros.getProperty("user"); System.out.println(user); String password = pros.getProperty("password"); System.out.println(password); } /* * Object put(Object key,Object value):向Map中新增一個元素 * Object remove(Objectkey):按照指定的key刪除此key-value * void putAll(Map t) * void clear():清空 Object * get(Object key):獲取指定key的value值。若無此key,則返回null * boolean containsKey(Objectkey) * boolean containsValue(Object value) * int size():返回集合的長度 boolean * isEmpty() boolean equals(Object obj) * HashMap:1.key是用Set來存放的,不可重複。value是用Collection來存放的,可重複 * 一個key-value對,是一個Entry。所有的Entry是用Set存放的,也是不可重複的。 * 2.向HashMap中新增元素時,會呼叫key所在類的equals()方法,判斷兩個key是否相同。 * 若相同 則只能新增進後新增的那個元素。 */ @Test public void test1() { //Object put(Object key,Object value):向Map中新增一個元素 Map map = new HashMap(); map.put("AA", 213); map.put("name", "changjiang"); map.put("BB", 456); map.put(123, "CC"); map.put(null, null); map.put(new Person("DD",23),31); System.out.println(map.size()); //輸出集合的長度 map.remove("BB"); //刪除指定元素 System.out.println(map.size()); System.out.println(map); Object value = map.get("name"); System.out.println(value); } /* 遍歷Map: * |---Set keySet() * |---Collection values() * |---Set entrySet()*/ @Test public void test2() { Map map = new HashMap(); map.put("AA", 213); map.put("name", "changjiang"); map.put("BB", 456); map.put(123, "CC"); map.put(null, null); map.put(new Person("DD",23),31); //1.遍歷key集 Set set = map.keySet(); for(Object obj:set) { //增強for迴圈遍歷 System.out.println(obj); } System.out.println(); //2.遍歷value集 Collection values = map.values(); Iterator i = values.iterator(); while(i.hasNext()){ //使用迭代器Iterator遍歷 System.out.println(i.next()); } System.out.println(); //3.如何遍歷key-value對 //方式一: Set set1 = map.keySet(); for(Object obj:set1) { System.out.println(obj + "-->" + map.get(obj)); } //方式二: System.out.println(); Set set2 = map.entrySet(); for(Object obj : set2) { Map.Entry entry = (Map.Entry)obj; System.out.println(entry);//1.第一種輸出 System.out.println(entry.getKey() + "-->" + entry.getValue());//2.第二種輸出 } } @Test public void test3() { Map map = new LinkedHashMap(); map.put("AA", 213); map.put("name", "changjiang"); map.put("BB", 456); map.put(123, "CC"); map.put(null, null); map.put(new Person("DD",23),31); Set set1 = map.keySet(); for(Object obj:set1) { System.out.println(obj + "-->" + map.get(obj)); } } @Test public void test4() { Map map = new TreeMap(); map.put(new Person("DD",21),31); map.put(new Person("MM",43),41); map.put(new Person("CC",41),11); map.put(new Person("FF",11),21); map.put(new Person("AA",11),22); Set set1 = map.keySet(); for(Object obj:set1) { System.out.println(obj + "-->" + map.get(obj)); } } //定製排序 @Test public void test5() { Comparator com = new Comparator() { //向TreeSet中新增Customer類的物件,在此compare()方法中,指明是按照Customerde的哪一個屬性排序的 @Override public int compare(Object o1, Object o2) { if(o1 instanceof Customer && o2 instanceof Customer) { Customer c1 = (Customer)o1; Customer c2 = (Customer)o2; int i = c1.getId().compareTo(c2.getId()); if(i==0) { return c1.getName().compareTo(c2.getName()); } return i; } return 0; } }; TreeMap map = new TreeMap(com); map.put(new Customer("AA",1001), 87); map.put(new Customer("BB",1005), 81); map.put(new Customer("VV",1003), 82); map.put(new Customer("FF",1008), 89); map.put(new Customer("EE",1002), 80); Set set = map.keySet(); for(Object obj : set) { System.out.println(obj); } System.out.println(); Collection values = map.values(); Iterator i = values.iterator(); while(i.hasNext()){ //使用迭代器Iterator遍歷 System.out.println(i.next()); } } }