// 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;
}
なぜこれらの2つの異なるアプローチを使用しますか?セットとリストの特性に関連するものはありますか? なぜ31を使用しますが、他の数字は使用しませんか? ありがとう!JavaがSetとArrayListの異なるハッシュコードメソッドを実装するのはなぜですか?
List vs Setについて私はそのことについて他の質問が見つかりませんでした。しかし、約31ビットは既に答えられています。ハッシュ関数が素数を使用する理由を検索すると、他の答えと同様に、http://stackoverflow.com/questions/299304を参照してください。 – yshavit