Code Fix

上級equals と hashCode を必ずセットで実装する理由 › パターン2

equals と hashCode を必ずセットで実装する理由

HashSetやHashMapが先にハッシュ値で振り分けるためです。

 1  import java.util.HashSet;
 2  import java.util.Set;
 3  
 4  public class Main {
 5      static class P {
 6          int id;
 7          P(int id) { this.id = id; }
 8          @Override public boolean equals(Object o) { return o instanceof P && ((P) o).id == id; }
 9          ______________________________________________________
                                       ^
10      }
11      public static void main(String[] args) {
12          Set<P> s = new HashSet<>();
13          s.add(new P(1)); s.add(new P(1));
14          System.out.println(s.size());
15      }
16  }
出力: 2期待: 1 (コンパイルは通っています)

空欄を埋めてビルドを通す

広告
広告スロット(未設定)

equals と hashCode を必ずセットで実装する理由

引数をObjectにする理由も扱います。

このエラーの解説と類題をまとめて見る →

広告
広告スロット(未設定)