Map深入學習(一)Map介面簡介
阿新 • • 發佈:2019-01-30
Map使用鍵值對來儲存資料。Map是一個介面,定義了對資料的增刪改查,替換和比較等等基本的操作。
Map內部定義了一個內部介面Entry,可以通過Map的 Set<Map.Entry<K, V>> entrySet()來獲取Entry物件。
Map怎麼判斷鍵值(key)是否存在呢?看看原始碼的實現
default V putIfAbsent(K key, V value) {
V v = get(key);
if (v == null) {
v = put(key, value);
}
return v;
}
這個方法是jdk1.8引入的,用來判斷Map中是否存在給定key值。
Map的獲取key的方法和獲取value的方法沒有具體實現,由子類去實現
V get(Object key);
V put(K key, V value);
下面列出Map中沒有具體實現的方法
int size();//獲取集合長度
boolean isEmpty();//判斷集合是否為空
boolean containsValue(Object value);//判斷集合是否含有給定值
V remove(Object key);//刪除集合給定值
void putAll(Map<? extends K, ? extends V> m) ;//新增一個集合元素
void clear();//清空集合
Set<K> keySet();
Collection<V> values();//獲取集合全部值
boolean equals(Object o);
int hashCode();
實際上,Map裡面的資料是由內部介面Entry來維護的,即所有資料都是經過Entry來儲存,看看Map裡面介面實現
interface Entry<K,V> {
V getValue();
V setValue(V value);
boolean equals(Object o);
int hashCode();
public static <K extends Comparable<? super K>, V> Comparator<Map.Entry<K,V>> comparingByKey() {
return (Comparator<Map.Entry<K, V>> & Serializable)
(c1, c2) -> c1.getKey().compareTo(c2.getKey());
}
public static <K, V extends Comparable<? super V>> Comparator<Map.Entry<K,V>> comparingByValue() {
return (Comparator<Map.Entry<K, V>> & Serializable)
(c1, c2) -> c1.getValue().compareTo(c2.getValue());
}
public static <K, V> Comparator<Map.Entry<K, V>> comparingByKey(Comparator<? super K> cmp) {
Objects.requireNonNull(cmp);
return (Comparator<Map.Entry<K, V>> & Serializable)
(c1, c2) -> cmp.compare(c1.getKey(), c2.getKey());
}
public static <K, V> Comparator<Map.Entry<K, V>> comparingByValue(Comparator<? super V> cmp) {
Objects.requireNonNull(cmp);
return (Comparator<Map.Entry<K, V>> & Serializable)
(c1, c2) -> cmp.compare(c1.getValue(), c2.getValue());
}
}
Entry可以設定鍵值和獲取鍵值。