JDK1.8 中文在线版
public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable
Cloneable:支持clone方法。
Serializable:支持序列化。
Map<K,V>:
类注释 [java.util.Map] 1 Map是一个将键映射到值的对象,不允许包含重复的键,一个键最多映射到一个值。 2 替代`Dictionary`类,因为它是一个抽象类而不是接口。 3 Map提供了三个视图,键集合,值集合,键值对集合。 4 注意:使用可变的对象作为键(会影响对象的equals和hashcode结果),map不会对这种情况做处理。 5 两个标准构造函数:空参构造函数(空映射),Map传参构造函数(根据传入的map映射构建新映射)。[非强制,JDK原生的map子类都严格遵守] 6 不支持操作:map的子类不需要接口的某些方法时,建议抛出UnsupportedOperationException, 如putAll方法对一个不允许修改的Map是多余的,可以抛出UnsupportedOperationException。 7 键值的限制:通常是空值以及类型的限制。 当不允许空键或空值时,建议抛出NullPointException, 当对键值有类型限制时,建议抛出ClassCastException。 8 Map以键的equals()和hashcode()作为依据。 Map接口提供了6大类方法: Query: size(); isEmpty(); constaionKey(Obj); containsValue(Obj); get(Obj); Modification: put(Obj,Obj); remove(Obj); Bulk: putAll(Map); clear(); Views: keySet(); values(); entrySet(); Views还提供了 <<Entry>> 键值对interface Comparison and hashing: equals(Obj); hashcode(); Defaultable: default方法,详情可查看源码。
类注释[java.util.AbstractMap] 1 提供了Map的骨架实现,尽量减少实现Map的工作量。 2 实现不支持修改的Map。 2.1 实现entrySet方法 2.2 不支持add和remove方法,迭代器不支持remove方法。 3 实现可修改的Map 3.1 实现put方法 3.2 实现entrySet方法,迭代器支持remove方法。 4 按照Map接口规范建议,提供两个标准构造函数。 代码实现: Query: (基于entrySet()实现) size() => 获取entrySet()的size isEmpty() => return size() == 0 constaionKey(Obj) => 遍历entrySet()迭代器 containsValue(Obj) => 遍历entrySet()迭代器 get(Obj) => 遍历entrySet()迭代器 Modification: put(Obj,Obj) => UnsupportedOperationException remove(Obj) => 遍历entrySet()迭代器 Bulk: putAll(Map) => 遍历put(Obj,Obj) clear() => entrySet().clear() Views: keySet() => 基于AbstractSet对entrySet()进行封装 values() => 基于AbstractCollection对entrySet()进行封装 entrySet() => 抽象方法,返回List<Map.Entry<K,V>> Comparison and hashing: equals(Obj) => 1 this == obj 2 obj instanceof Map 3 this.size() == ((Map)obj).size 4 遍历entrySet() 比较key和value是否一一匹配。 hashcode() => 遍历entrySet(),计算entry的hash总和。 toString() => {key=val,key=val...} InnerClass: SimpleEntry<K,V> => 可变的基础entry SimpleImmutableEntry<K,V> => 不可变的基础entry
上述对HashMap的超类进行了分析,做一个总结。
有空再写