// 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;
}
Warum Java diese zwei verschiedenen Ansätze verwenden? Gibt es irgendetwas, das mit der Eigenschaft von Set und List zusammenhängt? Warum verwendet es 31, aber keine anderen Nummern? Danke!Warum Java verschiedene Hashcode-Methoden von Set und ArrayList implementieren?
Ich habe den Teil über List vs Set beantwortet, weil ich dazu keine weiteren Fragen zu SO finden konnte. Aber das Bit über 31 ist bereits beantwortet: siehe http://stackoverflow.com/questions/299304, sowie andere Antworten, wenn Sie suchen, warum Hash-Funktionen Primzahlen verwenden. – yshavit