特点
- Map集合用于保存具有映射关系的数据:Key-Value(双列元素);
- Map中的 key 和 value; 可以是任何引用类型的数据,会封装到HashMap$Node对象中;
- Map中的key不允许重复,value可以重复;
- Map中的key可以为null,value也可以为null,注意key只能有一个null,value可以有多个null;
- key 与 value 之间存在单向一对一的关系,即通过指定的 key 总能找到对应的 value;
分析
- k-v 会通过newNode(hash, key, value, null); 封装到 HashMap$Node对象中;
transient HashMap.Node<K, V>[] table;
//Node时HashMap的内部类
static class Node<K, V> implements Entry<K, V> {
final int hash;
final K key;
V value;
HashMap.Node<K, V> next;
...
}
- k-v 为了方便程序员的遍历,还会创建 EntrySet集合,该集合存放的元素的类型是 Entry<k,v>;
Map.Entry 提供了重要的方法:例如 K getKey(); V getValue(); V setValue(V value)
transient Set<Entry<K, V>> entrySet;
//HashMap中的内部类
final class EntrySet extends AbstractSet<Map.Entry<K,V>> {
}
1.Entry<k,v>中的 k指向 Node<K, V> 节点中K,v指向Node<K, V> 节点中的V;
2.虽然定义的类型是Map.Entry,但是实际上存放的还是 HashMapNode是Map.Entry的实现累;