一直不清楚HashMap中的Entry<k,v>是个什么东东,最近看了一下源码,将自己的理解总结如下,望各位达人不吝赐教。(此文略去对hashcode生成的细节讨论)
HashMap中定义了一个实现了Map.Entry<k,v>的静态Entry<K,V>类,此类定义了如下(只摘录了最主要的部分):
static class Entry<K,V> implements Map.Entry<K,V> {
final K key;
V value;
Entry<K,V> next;
final int hash;
/**
* Creates new entry.
*/
Entry(int h, K k, V v, Entry<K,V> n) {
value = v;
next = n;
key = k;
hash = h;
}
public final K getKey() {
return key;
}
public final V getValue() {
return value;
}
……略
} 可以看出该类是用来存放键值对的,并且通过next指向下一个实例实现链表结构。
在HashMap中定义了一个Entry类型的数组(Entry[ ] table ),当要put key-value时,先通过key计算hashcode作为该数组的下标,然后将实例化的Entry<>置于此位置。若发生冲突(不同的key对应相同的下标)则通过Entry中的next实现链接。
所以我认为HashMap中的Entry<k,v>类型是以链表的形式存放键值对的。
|
|