Java中的Map雙邊隊列

  • 2020 年 3 月 18 日
  • 筆記

1.1 什麼是Map

鍵(Key)值(Value)對 鄧超 = 娘娘 貝克漢姆 = 維多利亞 黃磊 = 孫莉 吳京 = 謝楠

表格: 姓名:張三 年齡:23 性別:男

程式開發大部分數據都是鍵值對形式的 MySQL JSON XML 類對象成員變數和存儲的數據 從前端發送的數據也可以轉成Map格式 ==> 一鍵生成 ==> 類對象 ==> 一鍵存儲 ==> 資料庫

interface Map<K, V> –| class HashMap<K, V> 哈希表結構 –| class TreeMap<K, V> 底層是樹形結構,存儲要求K有對應的排序方式 Map雙邊隊列中鍵(Key)是唯一的,但是值(Value)可以重複

1.2 Map<K, V>雙邊隊列方法

增: put(K k, V v); 存入一個鍵值對類型,K和V都要符合泛型約束 putAll(Map<? extends K, ? extends V> map); 存入另一個Map雙邊隊列,並且要求添加的Map雙邊對接中的K和V都要和當前Map中存儲 的K和V一致 刪: remove(Object k); 刪除對應K的鍵(Key)值(Value)對 改: put(K k, V v); 對應當前K存在,修改對應內容 查: int size(); 當前Map雙邊隊列中,有效鍵值對個數 boolean isEmpty(); 是否為空 boolean containsKey(Object key); 判斷指定的Key是否存在 boolean containsValue(Object value); 判斷指定Value是否存在 Set keySet(); 返回整個Map雙邊隊列中所有Key對應的Set集合

【注意】 一個方法使用set結尾,表示該方法返回的是一個集合類型,大多是情況下都 是Set類型 Collection values(); 返回整個Map雙邊隊列中所有Value對應的Collection集合 【注意】 方法名如果是一個複數,返回值類型集合或者是數組情況居多

1.3 EntrySet

Entry 可以認為是鍵值對對象 定義在Map類內 class Entry<K, V> { K k; V v; } K,V是完全依賴於Map約束的,這裡可以Entry裡面保存的是每一個鍵值對類對象

Map中提供了一個方法 Set<Entry<K, V>> entrySet 返回值是鍵值對類對象Set集合 Set集合中存儲的是Entry類型 Entry類型是帶有泛型的

import java.util.HashMap;  import java.util.Map;  import java.util.Set;    public class Demo2 {  	public static void main(String[] args) {  		HashMap<String, String> map = new HashMap<String, String>();    		map.put("吳京", "謝楠");  		map.put("鄧超", "娘娘");  		map.put("黃磊", "孫莉");  		map.put("王寶強", "XX");    		Set<Map.Entry<String, String>> entrySet = map.entrySet();    		System.out.println(entrySet);  	}  }

1.4 TreeMap<K, V> 以及Comparable和Comparator

K是需要有對應的比較方式,如果沒有比較方式,無法存入。

推薦使用Comparator介面

import java.util.Comparator;  import java.util.TreeMap;    public class Demo3 {  	public static void main(String[] args) {  		TreeMap<String,String> map = new TreeMap<String, String>();    		map.put("李四", "1");  		map.put("王五", "1");  		map.put("趙六", "1");  		map.put("張三", "1");    		System.out.println(map);    		TreeMap<Dog,String> map2 = new TreeMap<Dog, String>(new Comparator<Dog>() {    			@Override  			public int compare(Dog o1, Dog o2) {  				return o1.getAge() - o2.getAge();  			}  		});    		map2.put(new Dog("王可可", 1), "111");  		map2.put(new Dog("八公", 2), "111");  		map2.put(new Dog("豆豆", 3), "111");  		map2.put(new Dog("老黃", 4), "111");  		map2.put(new Dog("旺財", 5), "111");    		System.out.println(map2);    	}  }