黑马程序员技术交流社区

标题: 关于HashMap的总结 [打印本页]

作者: 18664300701    时间: 2015-9-8 23:33
标题: 关于HashMap的总结
一直不清楚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>类型是以链表的形式存放键值对的。

作者: 阮文江    时间: 2015-9-8 23:45
感谢楼主分享!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2