首页 > 其他 > 详细

HashMap代码解析

时间:2018-04-10 18:25:57      阅读:178      评论:0      收藏:0      [点我收藏+]

hashmap (jdk 1.7)使用 “数组-链表” 方式进行存储,图形化表示如下:

技术分享图片

即,前面是一个数组,后面跟一个链表,那么数据结构这个对应到HashMap的代码里面是什么样子的呢?

在HashMap中定义了一个类型为Entry<K,V>的数组table,上图就是显示了这个table。

    /**
     * The table, resized as necessary. Length MUST Always be a power of two.
     */
    transient Entry<K,V>[] table = (Entry<K,V>[]) EMPTY_TABLE;

类型Entry<K,V>的定义如下:

static class Entry<K,V> implements Map.Entry<K,V> {
        final K key;
        V value;
        Entry<K,V> next;
        int hash;
        // 省略构造/get/set等函数
}

由Entry<K,V>的定义可知,上图每个节点中其实存了4个变量:

    key表示键,即存入map的键值

    value表示值,即存入map的值

    next表示下一个Entry节点

    hash表示key的哈希值。

那么上图准确表示应该是:

技术分享图片

 

HashMap代码解析

原文:https://www.cnblogs.com/lixiaolun/p/8781176.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!