Code Fix

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

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

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

 1  import java.util.Objects;
 2  
 3  public class Main {
 4      static class P {
 5          int id;
 6          P(int id) { this.id = id; }
 7          @Override public boolean equals(Object o) {
 8              return o instanceof P && ((______) o).id == id;
                                              ^
 9          }
10          @Override public int hashCode() { return Objects.hash(id); }
11      }
12      public static void main(String[] args) {
13          System.out.println(new P(1).equals(new P(1)));
14      }
15  }
Main.java:8: error: cannot find symbol symbol: variable id location: class Object

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

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

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

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

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

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