上級 › 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
空欄を埋めてビルドを通す
Objectのままではフィールドにアクセスできません。instanceofで確認した型へキャストします。
次の問題