首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Node.equals方法在java.utils.HashMap中的应用

Node.equals方法在java.utils.HashMap中的应用
EN

Stack Overflow用户
提问于 2019-01-25 12:00:35
回答 2查看 672关注 0票数 0

Hashmap中的静态Node类有一个相等的方法来比较这个Node对象和作为参数传递的Node对象。

代码语言:javascript
复制
static class Node<K,V> implements Map.Entry<K,V> {
    final int hash;
    final K key;
    V value;
    Node<K,V> next;

    Node(int hash, K key, V value, Node<K,V> next) {
        this.hash = hash;
        this.key = key;
        this.value = value;
        this.next = next;
    }

    public final K getKey()        { return key; }
    public final V getValue()      { return value; }
    public final String toString() { return key + "=" + value; }

    public final int hashCode() {
        return Objects.hashCode(key) ^ Objects.hashCode(value);
    }

    public final V setValue(V newValue) {
        V oldValue = value;
        value = newValue;
        return oldValue;
    }

    public final boolean equals(Object o) {
        if (o == this)
            return true;
        if (o instanceof Map.Entry) {
            Map.Entry<?,?> e = (Map.Entry<?,?>)o;
            if (Objects.equals(key, e.getKey()) &&
                Objects.equals(value, e.getValue()))
                return true;
        }
        return false;
    }
}

看看对象o分配给一个新的Map.Entry对象e的行。键和值的比较可以与对象o本身进行。为什么它首先复制到对象e,然后比较?对象o没有以任何方式被修改。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-01-25 12:03:33

Map.Entry<?,?> e = (Map.Entry<?,?>)o;没有分配给新的Map.Entry对象,它只将o转换为Entry对象,以便使用与当前Entry对象比较所需的getKey()getValue()方法。

o上唯一可用的方法在这里详细介绍,

票数 1
EN

Stack Overflow用户

发布于 2019-01-25 12:02:41

因为为了访问getKey()getValue()方法,需要将其转换为Map.Entry。这句台词就是这么做的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54364957

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档