JAVA學習篇14——map集合
Map:
java體系中非常重要的資料結構之一
以鍵值對的形式進行儲存元素
底層實現方法:陣列+連結串列 Map介面
實現:HashMap HashTable TreeMap LinkedHashMap Map核心API:
put() putAll() size() get() keySet() ContainsKey() ContainsValue()
values() isEmpty() remove() clear() entrySet() equals()
HashMap:
package com.ss.day16; 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 MapDemo { public static void main(String[] args) { apiMethod(); } public static void apiMethod() { /* * put() 新增元素 size() 獲取map集合大小 get() 獲取map集合裡面key所對應的value值 * map集合集合key和value可以為null */ // 例項化一個人Map物件 先用泛型指定key和vaule的型別 Map<String, String> map = new HashMap<String, String>(); // put()新增元素 map.put("抓八戒", "高老莊"); map.put("孫悟空", "花果山"); map.put("唐僧", "大唐"); map.put("蜘蛛精", "盤絲洞"); map.put("蜘蛛精", "盤絲洞1"); map.put(null, null); System.out.println(map.size()); System.out.println(map.get("蜘蛛精")); System.out.println(map.isEmpty() ? "map物件null" : "map物件不為null"); System.out.println("判斷map集合是否包含'抓八戒'的key值:" + map.containsKey("抓八戒")); System.out.println("判斷map集合是否包含'高老莊'的value值:" + map.containsValue("高老莊")); // System.out.println("根據key值刪除對應的Entry物件:"+map.remove("唐僧")); System.out.println(map.size()); Map<String, String> map1 = new HashMap<String, String>(); map1.put("沙僧", "流沙河"); map1.put("小白龍", "龍宮"); map.putAll(map1); System.out.println(map.size());// 7 System.out.println(map.get("小白龍")); // clear()會全部刪除資料 // map.clear(); // System.out.println(map.size());// 7 System.out.println("集合遍歷1-----------------------------------------"); // 呼叫keySet方法遍歷輸出map集合的key for (String key : map.keySet()) { System.out.println(key + "------" + map.get(key)); } System.out.println("集合遍歷2-----------------------------------------"); // 用Iterator物件方式遍歷map的key值 for (Iterator<String> its = map.keySet().iterator(); its.hasNext();) { String key = its.next(); System.out.println(key + "+++++++++++++" + map.get(key)); } System.out.println("集合遍歷3-----------------------------------------"); Collection<String> cls = map.values(); Iterator<String> values = cls.iterator(); while (values.hasNext()) { System.out.println("map的value值:" + values.next()); } System.out.println("集合遍歷4-----------------------------------------"); // Map.entry<Integer,String> 對映項(鍵-值對) 有幾個方法:用上面的名字entry // entry.getKey() ;entry.getValue(); entry.setValue(); // map.entrySet() 返回此對映中包含的對映關係的 Set檢視。 Set<Entry<String, String>> entrySet = map.entrySet(); for (Entry<String, String> entry : entrySet) { System.out.println(entry.getKey() + "-------------" + entry.getValue()); } } }
import java.util.HashMap; import java.util.Map; public class MapDemo1 { /* * == 和 equals的區別: */ public static void main(String[] args) { new Object(); objMenthod(); String str = new String("abc"); String str1 = new String("abc"); Class<? extends String> class1 = str.getClass(); Class<? extends String> class2 = str1.getClass(); System.out.println(class1+"++++++++++++++"); System.out.println(class2); System.out.println(str == str1); System.out.println(str.equals(str1)); System.out.println(str.hashCode()); System.out.println(str1.hashCode()); //System.out.println(a1.hashCode()); //hashcode相等情況下 equals不一定相等 //equals相等情況下 hashcode值一定相等 //如果判斷兩個物件的資料是否相等的情況 需要重寫hashCode和equals方法 } public static void objMenthod() { Object object = new Object(); String string = new String("abc"); String string1 = new String("abc"); System.out.println(string.equals(string1)); System.out.println(string == string1); Employee employee = new Employee("武松", 28); Employee employee1 = new Employee("武松", 28); System.out.println(employee.equals(employee1)); // ctrl+shift+o 快速導包 Map<Employee, String> objMap = new HashMap<Employee, String>(); objMap.put(new Employee("武松", 28), "景陽崗"); objMap.put(new Employee("武松1", 28), "景陽崗"); objMap.put(new Employee("武大郎", 28), "街上"); System.out.println(objMap.size());// 3 for (Employee emp : objMap.keySet()) { System.out.println(emp + "---" + objMap.get(emp)); } } }
HashTable:儲存結構是無序 key和value不可以為null key相同的情況下,後面入棧的value值會覆蓋前面的value值 支援同步處理、查詢效率相對HashMap低 TreeMap: 實現了自然順序的排序 TreeMap裡面的Key值排序 預設是升序 TreeMap的key值為為自定義物件的時候,實現Comparator compare() 實現Comparable comparTo()在方法裡面定義排序規則 LinkedHashMap: 是有順序的結構的,先進先出 繼承HashMap 使用雙向連結串列機制類實現資料的順序