JDK1.7-HashMap源代码注释版

   日期:2020-07-06     浏览:95    评论:0    
核心提示:JDK1.7-HashMap源代码注释版_the previous value associated with key, or * null if there

文章目录

  • 一、前言
  • 二、效果
  • 三、如何得到
    • (一)有力的可用此方式
    • (二)无力的可用此方式
  • 四、关键代码实例
  • 五、如何使用

一、前言

在学习java源码中,全是英文,看起来就有点费劲了,所以就把这些注释翻译了一遍。

采用机器翻译,多少会有不准的地方。意思能看明白就可以了。

这是我自己学习Hashmap源码的时候做的一件事。

压缩包里存放着的和原来的是一样的:

二、效果


中英对照:

可以学英语,又可以学代码,两全其美

三、如何得到

(一)有力的可用此方式

有力的可以到这里下载:https://download.csdn.net/download/qq_17623363/12578222

(二)无力的可用此方式

无力的可以加入此微信群下载哦(完全免费提供给大家):

我已加入CSDN合伙人计划

亲爱的各位粉丝:可以添加我的CSDN官方企业微信号,和我近距离互动聊天,为您答疑解惑

直接使用微信扫码即可,不用下载企业微信

四、关键代码实例



    public HashMap(Map<? extends K, ? extends V> m) {
        this(Math.max((int) (m.size() / DEFAULT_LOAD_FACTOR) + 1,
                      DEFAULT_INITIAL_CAPACITY), DEFAULT_LOAD_FACTOR);
        inflateTable(threshold);

        putAllForCreate(m);
    }

    
    //向上舍入为2的幂
    private static int roundUpToPowerOf2(int number) {
        // assert number >= 0 : "number must be non-negative";
        return number >= MAXIMUM_CAPACITY
                ? MAXIMUM_CAPACITY
                : (number > 1) ? Integer.highestOneBit((number - 1) << 1) : 1;
    }

private void inflateTable(int toSize) {
    // Find a power of 2 >= toSize 找一个 2 >= toSize的2的次方数
    int capacity = roundUpToPowerOf2(toSize);

    //扩容要用到的值
    threshold = (int) Math.min(capacity * loadFactor, MAXIMUM_CAPACITY + 1);
    //使用计算出来的值,初始化存储数据的数组
    table = new Entry[capacity];
    initHashSeedAsNeeded(capacity);
}


    
    public V put(K key, V value) {
        //先判断数组是不是一个空的,代表数组还未初始化;
        //类似懒加载,或者说是初始化,只有在put存元素的时候,才会真正的初始化里面的数组
        if (table == EMPTY_TABLE) {
            inflateTable(threshold);//初始化的方法
        }

        if (key == null)
            return putForNullKey(value);

        int hash = hash(key);//计算一个哈希值

        int i = indexFor(hash, table.length);//计算索引位置 索引始终保持在0-table.length之间

        //for():为了查找是不是重复的,如果key是重复的,就去覆盖掉旧的key的值,把原来的key的值给返回
        for (Entry<K,V> e = table[i]; e != null; e = e.next) {
            Object k;
            if (e.hash == hash && ((k = e.key) == key || key.equals(k))) {
                V oldValue = e.value;
                e.value = value;
                e.recordAccess(this);
                return oldValue;
            }
        }

        //如果没有重复的就继续执行
        modCount++;
        // key的hash值,key,val,索引
        addEntry(hash, key, value, i);
        return null;
    }

五、如何使用

下载下来之后,需要先解压出来:

创建一个普通的java项目,把下载的src中的文件解压到这个项目中的src包下:

如果你是idea:

选择jdk1.7版本:


只需要按下面配置即可:

这样的话,就可以随时进行编辑了,想怎么注释就可以怎么注释。

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服