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在该处没有元素,则直接保存。

  • 相关阅读:
    Web API初印象
    SQL注入总结篇
    Debian Linux 下安装pip3
    DVWA:环境搭建
    AWVS使用手册
    常见的反爬虫和应对方法
    Fiddler抓取手机APP数据包
    爬虫 Scrapy框架 爬取图虫图片并下载
    python 爬虫基础知识(继续补充)
    Python 爬虫 多进程清洗代理
  • 原文地址:https://www.cnblogs.com/weigy/p/12572835.html
Copyright © 2011-2022 走看看