// this is the hashCode method of Set
public int hashCode() {
int h = 0;
Iterator<E> i = iterator();
while (i.hasNext()) {
E obj = i.next();
if (obj != null)
h += obj.hashCode();
}
return h;
}
//this is the hashCode method of List
public int hashCode() {
int hashCode = 1;
for (E e : this)
hashCode = 31*hashCode + (e==null ? 0 : e.hashCode());
return hashCode;
}
Почему java использует эти два разных подхода? Есть ли что-либо, связанное с характеристикой Set и List? Почему он использует 31, но не другие цифры? Спасибо!Почему Java реализует другой метод hashcode для Set и ArrayList?
Я ответил на вопрос о List vs Set, потому что я не мог найти никаких других вопросов об этом. Но бит около 31 уже ответил: см. Http://stackoverflow.com/questions/299304, а также другие ответы, если вы ищете, почему хеш-функции используют простые числа. – yshavit