Map集合的基本使用
1. Map雙邊隊列
1.1 什麼是Map
鍵(Key)值(Value)對
鄧超 = 娘娘
貝克漢姆 = 維多利亞
黃磊 = 孫莉
吳京 = 謝楠
表格:
姓名:騷磊
年齡:16
性別:男
程序開發大部分數據都是鍵值對形式的
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<K> keySet();
返回整個Map雙邊隊列中所有Key對應的Set集合
【注意】一個方法使用set結尾,表示該方法返回的是一個集合類型,大多是情況下都
是Set類型
Collection<V> 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類型是帶有泛型的
package com.qfedu.b_map;
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接口
package com.qfedu.b_map;
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);
}
}