1Map
1.1Map概述
Map 地圖映射關(guān)系
? ? ORM 對象關(guān)系映射? 類對象 <==> 數(shù)據(jù)庫數(shù)據(jù)
雙邊隊列
? ? 數(shù)據(jù)存儲形式都是(Key)值(Value)對形式
Map雙邊隊列中對于數(shù)據(jù)存儲類型
? ? 有限制 存儲數(shù)據(jù)類型在創(chuàng)建Map雙邊隊列時進(jìn)行約束,保證數(shù)據(jù)類型一致化
? ? 也沒限制 Map可以滿足任意數(shù)據(jù)類型
Map使用兩泛型
? ? ? ? Map<K,V>
1.2Map整體結(jié)構(gòu)和常用API
interface Map<K,V>
---| class HashMap<K , V>
? ? 底層存儲數(shù)據(jù)結(jié)構(gòu)采用的方式是哈希表方式惧眠。存儲數(shù)據(jù)時根據(jù)當(dāng)前存儲Key作為計算機存儲位置籽懦,和查詢元素的唯一表示。
-------| class TreeMap<K,V>
? ? 底層存儲數(shù)據(jù)結(jié)構(gòu)是一個二叉樹結(jié)構(gòu)氛魁,要求存儲的鍵值對暮顺,Key必須有對應(yīng)排序方式。這里需要Comparable<T>
? ? 常用
? ? API? Aplication Program Interface
? ? SDK Softer Development Kits
增
put (K key秀存, V value)捶码;
添加符合Map要求的鍵值對存入到雙邊隊列中
put All(Map<? extends K, ? extends V> map)
添加另一個Map到當(dāng)前Map中,要求當(dāng)前Map本身對應(yīng)的K或链,或者其子類
V是當(dāng)前Map本身對應(yīng)V赐写,或者其子類
刪
remove(Object key)惑朦;
刪除對應(yīng)key鍵值對
改
put(K key, V value)途事;
使用value修改已經(jīng)存在的key對應(yīng)的值
查
int size();
Map雙邊隊列個數(shù)
boolean isEmpty();
判斷當(dāng)前Map雙邊隊列中是否為空
boolean containKey(Object key);
判斷指定Key是否存在
boolean containValue(Object value);
判斷指定Value是否存在
Set<K> keySet()掀淘;
返回Map雙邊隊列中所有Key對應(yīng)Set集合
Collection<V> valuses();
返回Map雙邊隊列中所有valuse對應(yīng)Collection集合
【補充】
setId
setName
以上方法是Setter方法油昂,設(shè)置類對象屬性的方法
keySet
返回值類型是一個Set集合革娄,具有數(shù)據(jù)存儲唯一性
valuses
以s結(jié)尾的方法,表示復(fù)數(shù)冕碟,一般返回值類型都是Collection拦惋,List或者數(shù)組
總結(jié)
set開頭 設(shè)置方法
get開頭 獲取方法
Set結(jié)尾,返回值是Set集合安寺,數(shù)據(jù)唯一
s結(jié)尾厕妖,返回值類是Collection,List或者數(shù)組
1.3HashMap方法演示
package com.test;
import java.util.Collection;
import java.util.HashMap;
import java.util.Set;
public class Demo1 {
public static void main(String[] args) {
/*
* Map是一接口挑庶,沒有自己的類對象言秸,這里是Map接口實現(xiàn)類的HashMap做方法演示
*/
HashMap<String, Integer> map1 = new HashMap<String, Integer>();
map1.put("Dior 999", 280);
map1.put("YSL", 220);
map1.put("Mac", 180);
map1.put("阿尼瑪 405", 230);
System.out.println(map1);
HashMap<String, Integer> map2 = new HashMap<String, Integer>();
map2.put("TF", 179);
map2.put("雅詩蘭黛", 229);
map1.putAll(map2);
System.out.println(map1);
map1.put("阿尼瑪 405", 280);
System.out.println(map1);
System.out.println(map1.size());
System.out.println(map1.isEmpty());
System.out.println(map1.containsKey("YSL"));
System.out.println(map1.containsValue("楊樹林"));
System.out.println(map1.containsValue(179));
System.out.println(map1.containsValue(100));
Set<String> KeySet = map1.keySet();
System.out.println(KeySet);
Collection<Integer> values = map1.values();
System.out.println(values);
}
}
1.4TreeMap演示
package com.test;
import java.util.TreeMap;
public class Demo2 {
public static void main(String[] args) {
TreeMap<Person, Integer> treeMap = new TreeMap<Person, Integer>(new MyComparator());
Person person = new Person(1, "騷磊" , 16);
treeMap.put(person, 100);
treeMap.put(new Person(2, "騷杰", 26), 100);
treeMap.put(new Person(3, "寶哥", 16), 200);
treeMap.put(new Person(2, "茂林", 56), 100);
treeMap.put(new Person(2, "康爺", 76), 100);
treeMap.put(new Person(2, "大熊", 26), 200);
System.out.println(treeMap);
System.out.println(treeMap.size());
treeMap.put(new Person(6, "大熊", 96) , 200);
System.out.println(treeMap);
System.out.println(treeMap.size());
person.setAge(96);
System.out.println(treeMap);
}
}
package com.test;
public class Person {
private int id;
private String name;
private int age;
public Person() {}
public Person(int id, String name, int age) {
this.id = id;
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Person [id=" + id + ", name=" + name + ", age=" + age + "]";
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
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;
}
}
package com.test;
import java.util.Comparator;
public class MyComparator implements Comparator<Person> {
@Override
public int compare(Person o1, Person o2) {
return o1.getAge() - o2.getAge();
}
}
1.5關(guān)于Map鍵值對整體思想
Map雙邊隊列中把Key和Value進(jìn)行一個封裝操作,完全按照一個數(shù)據(jù)類型來處理
class Entry<K, V> {
K k;
V v;
.....
}
Map雙邊隊列中提供了操作Entry的方法
? ? Set<Map.Entry<K, V>>entrySet();
返回值類型是Entry鍵值對形式數(shù)據(jù)的Set集合
Set<Map.Entry<K,V>>
Map.Entry<K,V>Map接口的內(nèi)部接口Entry迎捺,使用的泛型 K举畸,V對應(yīng)Map
創(chuàng)建過程中約束的K,V
因為返回值是Set集合,集合中帶有泛型 Set<Map 接口中的內(nèi)部接口Entry>
Entry對應(yīng)的API
K getKey()凳枝;
V getValue()抄沮;
V setValue(V? value );
1.6小總結(jié)
1Map很重要岖瑰,尤其是HashMap叛买,鍵值對操作在后期開發(fā)中非常常見
數(shù)據(jù)庫,Session Cookie 數(shù)據(jù)傳遞 Json XML..
2比較器接口一定要學(xué)會使用L6B收酢!
Comparator 【重點】自由度非常高露戒,滿足各種條件D牙瘛!玫锋!
Comparator