Методы hashCode в Java [дубликаты]

это нормально, что у меня один и тот же хэш-код для обоих ?? Я в замешательстве. Я думал, что хэш-код был уникальным.

public static void main(String[] args) {
    HashMap<String, Integer> t = new HashMap<String, Integer>();

    t.put("one", 123);
    t.put("two", 123);

    System.out.println(t.get("one").hashCode());
    System.out.println(t.get("two").hashCode());
}

выход

123
123

person user2037696    schedule 23.08.2014    source источник
comment
каков ваш фактический вопрос?   -  person Braj    schedule 23.08.2014


Ответы (2)


Да, 123 и 123 имеют одинаковый хэш-код, потому что это два Целые числа с одинаковым значением int:

t.get("one") // returns an Integer with an int value of 123
t.get("two") // returns an Integer with an int value of 123

Из документов (Integer.hashCode()):

значение хеш-кода для этого объекта, равное примитивному значению int, представленному этим объектом Integer.

В случае сомнений используйте источник:

     /**
  743        * Returns a hash code for this {@code Integer}.
  744        *
  745        * @return  a hash code value for this object, equal to the
  746        *          primitive {@code int} value represented by this
  747        *          {@code Integer} object.
  748        */
  749       public int hashCode() {
  750           return value;
  751       }
person Nir Alfasi    schedule 23.08.2014

сильные текстовые объекты, которые равны, должны иметь одинаковый хэш-код в запущенном процессе

Обратите внимание, что это не подразумевает следующие распространенные заблуждения:

Unequal objects must have different hash codes – WRONG!
Objects with the same hash code must be equal – WRONG!

введите здесь описание изображения

Контракт позволяет неравным объектам использовать один и тот же хеш-код, например, объектам "A" и "µ" на скетче выше.

Это очевидно, потому что количество возможных различных объектов обычно больше, чем количество возможных хэш-кодов (2^32).

person Sandeep Roniyaar    schedule 23.08.2014