Объяснение хэш-кода вектору
Могу ли я получить представление о том, как хэш-код принимает значения за элемент, добавленный к вектору?
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
).