Java中的STL01-Map
要点
- Set的实现是基于Map的,HashSet是基于HashMap的,TreeSet是基于TreeMap的。
- Map的继承关系如下图所示
Map接口
public interface Map<K,V> {
}
Map接口中的API
abstract void clear()
abstract boolean containsKey(Object key)
abstract boolean containsValue(Object value)
abstract Set<Entry<K, V>> entrySet()
abstract boolean equals(Object object)
abstract V get(Object key)
abstract int hashCode()
abstract boolean isEmpty()
abstract Set<K> keySet()
abstract V put(K key, V value)
abstract void putAll(Map<? extends K, ? extends V> map)
abstract V remove(Object key)
abstract int size()
abstract Collection<V> values()
- entrySet()返回键-值对的Set
- keySet()返回键的Set
- values()返回值的Collection
- Map中不能用重复的键,所以API中返回带有Key的都是用Set返回
Map.Entry接口
interface Entry<K,V> {
}
Map.Entry保存Map中的键值对,具有的API如下
bstract boolean equals(Object object)
abstract K getKey()
abstract V getValue()
abstract int hashCode()
abstract V setValue(V object)
entry中提供了两种比较器,分别是按照Key比较、按照Value排序,具体实现如下
// 按照Key比较
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());
}
// 按照Value比较
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());
}
// 按照传入的Key比较器比较
public static <K,