zoukankan      html  css  js  c++  java
  • HashMap 存储实现 过程

    源码:

    public V put(K key, V value) {
    //当key为null,调用putForNullKey方法,保存null与table第一个位置中,这是HashMap允许为null的原因
    if (key == null)
    return putForNullKey(value);
    //计算key的hash值
    int hash = hash(key.hashCode()); ------(1)
    //计算key hash 值在 table 数组中的位置
    int i = indexFor(hash, table.length); ------(2)
    //从i出开始迭代 e,找到 key 保存的位置
    for (Entry<K, V> e = table[i]; e != null; e = e.next) {
    Object k;
    //判断该条链上是否有hash值相同的(key相同)
    //若存在相同,则直接覆盖value,返回旧value
    if (e.hash == hash && ((k = e.key) == key || key.equals(k))) {
    V oldValue = e.value; //旧值 = 新值
    e.value = value;
    e.recordAccess(this);
    return oldValue; //返回旧值
    }
    }
    //修改次数增加1
    modCount++;
    //将key、value添加至i位置处
    addEntry(hash, key, value, i);
    return null;
    }

    首先判断key是否为null,若为null,则直接调用putForNullKey方法。

    若不为空则先计算key的hash值,然后根据hash值搜索在table数组中的索引位置,如果table数组在该位置处有元素,则通过比较是否存在相同的key,若存在则覆盖原来key的value,否则将该元素保存在链头(最先保存的元素放在链尾)。若table在该处没有元素,则直接保存。

  • 相关阅读:
    java——base64 加密和解密
    BASE64Encoded() 方法报错说方法未定义
    java 实现HTTP连接(HTTPClient)
    如何关闭一些烦人的弹窗(总结)
    IDEA
    6、git和github
    5、预测和鉴定miRNA的靶基因
    4、在线blast比对结果解析(保守结构域)
    ASE分析
    3、Linux下配置Java环境
  • 原文地址:https://www.cnblogs.com/weigy/p/12572835.html
Copyright © 2011-2022 走看看