A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 18664300701 中级黑马   /  2015-9-8 23:33  /  301 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

一直不清楚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>类型是以链表的形式存放键值对的。

1 个回复

倒序浏览
感谢楼主分享!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马