对于键值对key-value,若Key的equals比较为false,是新的键值对指向旧的,还是旧的指向新的?

尼古拉斯__赵四 2016-01-29 07:40:09
当两个Key的hashcode值相同并put到HashMap中时,
若这两个Key的equals比较为true那么就是替换Value操作.
若这两个Key的equals比较为false那么它们在HashMap内部数组的同一位置,这时,该位置上的两个Entry会形成链表结构,遍历链表会降低HashMap的检索性能!应当避免。
我想问问,链表是新的指向旧的还是旧的指向新的。
(问了一个老师,老师说,有两种情况,可能新的指向旧的,也可能旧的指向新的,这是底层决定的,因为不记得在哪里看到过说是谁指向谁,所以有些小疑惑)
谢谢大神!
...全文
137 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
rumlee 2016-02-01
  • 打赏
  • 举报
回复

    public V put(K key, V value) {
        if (table == EMPTY_TABLE) {
            inflateTable(threshold);
        }
        if (key == null)
            return putForNullKey(value);
        int hash = hash(key);
        int i = indexFor(hash, table.length);
        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++;
        addEntry(hash, key, value, i);
        return null;
    }

很明显新加入的是放在后面的啊,同一个hash值第一个放入的就是链表头,然后依次next,看看jdk的源码就好了啊。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧