目录
简介
Map是我们常用集合之一,它用于保存具有映射关系的数据。Map集合中的每一个元素都是由键值对构成。Map中所有的键不能重复,但是值可以重复。
Map 框架
Map 一个高度封装的集合接口,它派生出来的类或接口如下

整个Map框架中用到了Dictionary 抽象类,其他类都是Map直接或间接派生出来。
Map 接口源码解读
public interface Map<K,V>
Map 接口定义了集合的基本行为,及内部元素模型。
Map 未实现方法
// 获取元素个数
int size();
// 是否为空
boolean isEmpty();
// 是否包含key
boolean containsKey(Object key);
// 是否包含value
boolean containsValue(Object value);
// 根据key取值
V get(Object key);
// 添加元素
V put(K key, V value);
// 移除key
V remove(Object key);
// 添加一个Map集合
void putAll(Map<? extends K, ? extends V> m);
// 清除
void clear();
// 获取整个key集合
Set<K> keySet();
// 获取所有值
Collection<V> values();
// 获取所有键值对
Set<Map.Entry<K, V>> entrySet();
// 比较是否一样
boolean equals(Object o);
// 获取集合hashCode
int hashCode();
Map 默认方法
default V getOrDefault(Object key, V defaultValue) {
V v;
// key不存在或key对应值为空返回默认值,否有返回实际值
return (((v = get(key)) != null) || containsKey(key))
? v
: defaultValue;
}
根据key获取值,为空或不存在返回默认值
default V putIfAbsent(K key, V value) {
V v = get(key);
// key为空则添加
if (v == null) {
v = put(key, value);
}
return v;
}
如果key不存在或为空就添加此键值对
default boolean remove(Object key, Object value) {
Object curValue = get(key);
// value不一样或key不存在返回false
if (!Objects.equals(curValue, value) ||
(curValue == null && !containsKey(key))) {
return false;
}
remove(key);
return true;
}
如果key对应的值与value一样

本文详细介绍了Java中Map集合框架的结构与实现,包括Map接口、内部Entry接口、AbstractMap抽象类、Dictionary类、NavigableMap接口和SortedMap接口的源码解读。探讨了Map的键值对特性、常见实现类如HashMap、HashTable的区别,以及Map在实际应用中的常见面试题。
最低0.47元/天 解锁文章
998





