こんにちは私はHashMap
を使用して、BulletinBoardでサービスとサービスリクエストを追跡しています。しかし、私は重複したキーを取得しているので、私はハッシュコードを持っている必要があります。誰がこれがなぜそうかもしれないと言うことができますか?なぜ私のHashMapは重複キーを許可していますか?
のkeySetの内容:
Services: [1, 1, 6, 6, 3]
Requests: [8, 7, 6, 5, 8, 4, 5, 6, 2]
がここに関連するコードです:
private static final HashMap<Advert, Integer> services = new HashMap<>();
...
public class Advert {
private int id;
private BoardPoster poster;
public Advert(BoardPoster poster) {
this.poster = poster;
}
public BoardPoster getPoster() {
return poster;
}
public void spawn() {
id = RANDOM.nextInt(ADVERT_RANGE);
}
public int getID() {
return id;
}
@Override
public String toString() {
return Integer.toString(id);
}
@Override
public boolean equals(Object o) {
if (o != null && o instanceof Advert) {
return ((Advert) o).id == id;
}
return false;
}
@Override
public int hashCode() {
return 67 * 5 + this.id;
}
}
1つの発言:「o!= null && instanceof Advert」をチェックすることは冗長です。 'o instanceof Advert'は' o'が 'null'ならば' false'を返します。 Javaでは、 'null'は何かの型とはみなされないので、すべてのインスタンスのチェックは失敗します。 – Brian
'id'は' int'なので、あなたはハッシュコードを単純化することができます: 'return this.id;'。 – assylias
@assyliasハッシュコードを実行するのは悪い方法です。なぜなら、実際にはハッシングではないからです。 'this.id%1000'を返す方が良い選択肢かもしれません。 –