public interface Map<K,V>
这个接口比较简单,除了声明泛型键值对,没什么别的。
int size();
这个方法返回实现类的长度
boolean isEmpty();
这个方法返回实现类是否为空
boolean containsKey(Object key);
这个方法判断map里是否含有某个键。
V get(Object key);
这个方法是获取键值的方法。
V put(K key, V value);
这个方法是向map中添加键值对的方法。
V remove(Object key);
这个方法是删除键值对的方法。
void putAll(Map<? extends K, ? extends V> m);
这个方法是将参数map中的所有键值对添加到本map中。
void clear();
这个方法是清空map的方法。
Set<K> keySet();
这个方法是返回键集合的方法。
Collection<V> values();
这个方法是返回值集合的方法。
Set<Map.Entry<K, V>> entrySet();
这个方法是返回键值对集合的方法。
interface Entry<K,V> {
这是键值对的内部接口。
K getKey();
这个方法是获取键的方法。
V getValue();
这个方法是获取值的方法。
V setValue(V value);
这个方法是设置值的方法。
boolean equals(Object o);
这个方法是判断equals方法。
int hashCode();
这个是返回hashCode的方法。
这个接口里还有一些1.8之后和lambda表达式相关的方法,这里先不说了。
然后继续看Map接口的方法,equals和hashCode方法就省略了。
default V getOrDefault(Object key, V defaultValue) {
V v;
return (((v = get(key)) != null) || containsKey(key))
? v
: defaultValue;
}
加了default关键字,就可以在接口中实现具体的方法。
这个方法是用来获取值,但如果不存在值就返回默认值的方法。
首先创建值的泛型对象v,然后将get方法返回值赋给v,如果复制后的v不为空或containsKey方法为true,就将v返回,否则返回默认值,也就是第二个参数。
default V putIfAbsent(K key, V value) {
V v = get(key);
if (v == null) {
v = put(key, value);
}
return v;
}
这个方法是如果不存在键值对,就插入的方法。
首先先通过get方法获取key对应的值。如果值为空,就调用put方法,将新值返回。
default boolean remove(Object key, Object value) {
Object curValue = get(key);
if (!Objects.equals(curValue, value) ||
(curValue == null && !containsKey(key))) {
return false;
}
remove(key);
return true;
}
这个方法是先判断后删除元素的方法,首先通过get方法获取值,然后通过Objects类的方法判断刚获取到的值和第二个参数是否equals,如果不equals,或者刚获取到的值为空且map中不包含这个key,就返回false。
否则调用remove方法,删掉这个key,并返回true。
default boolean replace(K key, V oldValue, V newValue) {
Object curValue = get(key);
if (!Objects.equals(curValue, oldValue) ||
(curValue == null && !containsKey(key))) {
return false;
}
put(key, newValue);
return true;
}
这个方法就是替换方法,和上面那个很类似就是判断不成立后,调用的是put方法。
default V replace(K key, V value) {
V curValue;
if (((curValue = get(key)) != null) || containsKey(key)) {
curValue = put(key, value);
}
return curValue;
}
这个方法是替换的方法。和上面拿两个方法很类似,判断后直接返回获取的值。
Map接口还有好多方法没说,因为Lambda表达式这块我不是很熟练,等熟练了我补上!