什么是哈希码,并且在哈希图中的条目类中等于

时间:2019-07-05 15:57:30

标签: java hashmap

我可以看到Java的Hashmap中的静态Entry类具有Equals和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();
    }

2 个答案:

答案 0 :(得分:1)

content-security-policy-report-only: script-src 'self' 'unsafe-inline' https: 'strict-dynamic' 'nonce-xxxx'; upgrade-insecure-requests; default-src 'self' gap: blob:; style-src 'self' 'unsafe-inline'; base-uri 'none'; report-uri https://xxx.report-uri.com/r/d/csp/reportOnly 是键值对在地图中的表示。所有这些方法都可以用于比较键值对,而不是用于比较键对象。

答案 1 :(得分:1)

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

此外,它们有时被用作穷人的Pair类:Didn't Java once have a Pair class?https://www.baeldung.com/java-pairshttps://www.techiedelight.com/five-alternatives-pair-class-java/,为此,您确实需要这些{{ 1}}和equals