【问题标题】:What are hashcode and equals in entry class in hashmap什么是hashmap入口类中的hashcode和equals
【发布时间】:2019-07-05 15:57:30
【问题描述】:

我可以看到java中Hashmap中的静态Entry类有Equals和Hashcode方法。这些方法的用途是什么。put,get方法我们使用对象hashcode和equals方法....

static class Entry<K,V> implements Map.Entry<K,V> {
    final K key;
    V value;
    Entry<K,V> next;
    final int hash;

    /**
     * Creates new entry.
     */
    Entry(int h, K k, V v, Entry<K,V> n) {
        value = v;
        next = n;
        key = k;
        hash = h;
    }

    public final boolean equals(Object o) {
        if (!(o instanceof Map.Entry))
            return false;
        Map.Entry e = (Map.Entry)o;
        Object k1 = getKey();
        Object k2 = e.getKey();
        if (k1 == k2 || (k1 != null && k1.equals(k2))) {
            Object v1 = getValue();
            Object v2 = e.getValue();
            if (v1 == v2 || (v1 != null && v1.equals(v2)))
                return true;
        }
        return false;
    }

    public final int hashCode() {
        return (key==null   ? 0 : key.hashCode()) ^
               (value==null ? 0 : value.hashCode());
    }

    public final String toString() {
        return getKey() + "=" + getValue();
    }

【问题讨论】:

  • 这段代码不是来自 Java 的 Hashtable 实现吗(相对于 HashMap
  • 是Java hashmap类

标签: java hashmap


【解决方案1】:

Map.Entry 是映射中键值对的表示形式。所有这些方法都可以用于比较键值对,而不是用于比较键对象。

【讨论】:

    【解决方案2】:

    Entryes 也是对象,完全可以比较它们是否相等或将它们用作映射中的键。

    此外,它们有时被用作穷人的Pair 类:Didn't Java once have a Pair class?https://www.baeldung.com/java-pairshttps://www.techiedelight.com/five-alternatives-pair-class-java/,对于这种用途,您真的需要equalshashCode 的这些实现。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-17
      • 1970-01-01
      • 1970-01-01
      • 2017-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多