码迷,mamicode.com
首页 > 其他好文 > 详细

HashMap代码解析

时间:2018-04-10 18:48:32      阅读:205      评论:0      收藏:0      [点我收藏+]

标签:ansi   size   java   分享   hash   table   int   ESS   try   

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代码解析

标签:ansi   size   java   分享   hash   table   int   ESS   try   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!