Он работает одинаково для каждой (истинной) реализации интерфейса List (если он поддерживает добавление элементов).Поведение метода .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()
.
Как показал световой кодер, AbstractList
содержит только эту реализацию, и, следовательно, не каждый разработчик интерфейса List
должен делать это снова.
Например, вы также можете написать Arrays.asList("1", "2").hashCode()
и получить те же 2530 (если вы не измените hashCode()
реализацию String
).