Map
-
特点:
- 用于存储任意键值对(Key-Value)
- 键:无序、无下标、不允许重复
- 值:无序、无下标、允许重复
-
方法:
Modifier and Type Method and Description void
clear()
从该地图中删除所有的映射(可选操作)。default V
compute(K key, BiFunction<? super K,? super V,? extends V> remappingFunction)
尝试计算指定键的映射及其当前映射的值(如果没有当前映射,null
)。default V
computeIfAbsent(K key, Function<? super K,? extends V> mappingFunction)
如果指定的键尚未与值相关联(或映射到null
),则尝试使用给定的映射函数计算其值,并将其输入到此映射中,除非null
。default V
computeIfPresent(K key, BiFunction<? super K,? super V,? extends V> remappingFunction)
如果指定的密钥的值存在且非空,则尝试计算给定密钥及其当前映射值的新映射。boolean
containsKey(Object key)
如果此映射包含指定键的映射,则返回true
。boolean
containsValue(Object value)
如果此地图将一个或多个键映射到指定的值,则返回true
。Set<Map.Entry<K,V>>
entrySet()
返回此地图中包含的映射的Set
视图。boolean
equals(Object o)
将指定的对象与此映射进行比较以获得相等性。default void
forEach(BiConsumer<? super K,? super V> action)
对此映射中的每个条目执行给定的操作,直到所有条目都被处理或操作引发异常。V
get(Object key)
返回到指定键所映射的值,或null
如果此映射包含该键的映射。default V
getOrDefault(Object key, V defaultValue)
返回到指定键所映射的值,或defaultValue
如果此映射包含该键的映射。int
hashCode()
返回此地图的哈希码值。boolean
isEmpty()
如果此地图不包含键值映射,则返回true
。Set<K>
keySet()
返回此地图中包含的键的Set
视图。default V
merge(K key, V value, BiFunction<? super V,? super V,? extends V> remappingFunction)
如果指定的键尚未与值相关联或与null相关联,则将其与给定的非空值相关联。V
put(K key, V value)
将指定的值与该映射中的指定键相关联(可选操作)。void
putAll(Map<? extends K,? extends V> m)
将指定地图的所有映射复制到此映射(可选操作)。default V
putIfAbsent(K key, V value)
如果指定的键尚未与某个值相关联(或映射到null
)将其与给定值相关联并返回null
,否则返回当前值。V
remove(Object key)
如果存在(从可选的操作),从该地图中删除一个键的映射。default boolean
remove(Object key, Object value)
仅当指定的密钥当前映射到指定的值时删除该条目。default V
replace(K key, V value)
只有当目标映射到某个值时,才能替换指定键的条目。default boolean
replace(K key, V oldValue, V newValue)
仅当当前映射到指定的值时,才能替换指定键的条目。default void
replaceAll(BiFunction<? super K,? super V,? extends V> function)
将每个条目的值替换为对该条目调用给定函数的结果,直到所有条目都被处理或该函数抛出异常。int
size()
返回此地图中键值映射的数量。Collection<V>
values()
返回此地图中包含的值的Collection
视图。
HashMap
-
JDK1.2版本,线程不安全,运行效率快;允许使用null作为key和value
-
存储结构:JDK1.8之前(数组+链表);JDK1.8之后(数组+链表+红黑树)
TreeMap
-
线程不安全,实现了SortedMap接口,可以对key自动排序
-
存储结构:红黑树
-
源码分析:
-
默认参数
参数 解释 默认值 comparator 比较器 root 根节点 size 包含键值对的数量 0 modCount 记录被修改的次数 0 -
构造函数
-
public TreeMap() {
comparator = null;
}
public TreeMap(Comparator<? super K> comparator) {
this.comparator = comparator;
}
public TreeMap(Map<? extends K, ? extends V> m) {
comparator = null;
putAll(m);
}
public TreeMap(SortedMap<K, ? extends V> m) {
comparator = m.comparator();
try {
buildFromSorted(m.size(), m.entrySet().iterator(), null, null);
} catch (java.io.IOException cannotHappen) {
} catch (ClassNotFoundException cannotHappen) {
}
}
```
- 源码分析
见hashmap源码分析红黑树部分
-[HashMap源码分析,源码逐行解释](https://blog.csdn.net/m0_38112165/article/details/108951472)
### HashTable
- 线程安全,不允许key和value是null
- 存储结构:JDK1.8之前(数组+链表);JDK1.8之后(数组+链表+红黑树)
- 源码分析:
与HashMap相比,方法前添加了``synchronized``关键字,源码分析见HashMap
-[HashMap源码分析,源码逐行解释](https://blog.csdn.net/m0_38112165/article/details/108951472)