Что такое хеш-код и равно в классе записи в хэш-карте - PullRequest
0 голосов
/ 05 июля 2019

Я вижу статический класс Entry в Hashmap в java, в котором есть методы Equals и Hashcode. Для чего используются эти методы. В получаемых методах используются методы 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 ]

1 голос
/ 05 июля 2019

Entry также являются объектами, вполне возможно сравнить их на равенство или использовать их в качестве ключей на карте.

Кроме того, они иногда используются как класс Pair бедного человека: Разве у Java не было класса Pair? , https://www.baeldung.com/java-pairs, https://www.techiedelight.com/five-alternatives-pair-class-java/ и для этого использования вы действительно хотите эти реализации equals и hashCode.

1 голос
/ 05 июля 2019

Map.Entry - представление пары ключ-значение на карте.Все эти методы могут использоваться для сравнения пар ключ-значение, а не для сравнения объектов ключ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...