Объяснение хэш-кода вектору
Могу ли я получить представление о том, как хэш-код принимает значения за элемент, добавленный к вектору?
Vector v = new Vector();
//Add elements to Vector
v.add("1");
System.out.println(v.hashCode());
v.add("2");
System.out.println(v.hashCode());
v.add("=");
System.out.println(v.hashCode());
Значения хэш-кода
80
2530
78491
2 ответа:
Он работает одинаково для каждой (истинной) реализации интерфейса списка (если он поддерживает добавление элементов). Поведение метода
.hashCodeопределяется вList.hashCode()следующим образом:Возвращает значение хэш-кода для этого списка. Хэш-код списка определяется как результат следующего вычисления:
int hashCode = 1; Iterator<E> i = list.iterator(); while (i.hasNext()) { E obj = i.next(); hashCode = 31*hashCode + (obj==null ? 0 : obj.hashCode()); }Это гарантирует, что
list1.equals(list2)подразумевает, чтоlist1.hashCode()==list2.hashCode()для любых двух списков,list1иlist2, как того требует генеральный договорObject.hashCode().Как показал glowcoder,
AbstractListсодержит только эту реализацию, и поэтому не каждый исполнитель интерфейсаListдолжен делать это снова.Например, вы также можете написать
Arrays.asList("1", "2").hashCode()и получить те же 2530 (до тех пор, пока вы не измените реализациюhashCode()String).