методи на 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