今まで飛んだ勘違いをしていたようだ。
Object型の癖でついhashCodeは"同じインスタンスなら同じ値を持つもの"だと思い込んでいた
ちがう、"同じ内容のインスタンスなら同じ値を持つもの"らしい
というのもPoint型をHashSetに詰め込もうとしたら、予期しない事が起きたのだ。
えっとまぁ今回はPoint型を継承してhashCodeを上書きするかなぁ
取り敢えずそういう"内容が同じでもインスタンスが違うということに意味があるクラス"についてはそういうhashCodeのつけ方をしろってことかな
import java.awt.Point; import java.util.HashSet; public class Test { public static void main(String[] args) { Point p=new Point(0,0); HashSet<Point> ps=new HashSet<Point>(); System.out.println(p.hashCode()); ps.add(p); p.setLocation(0,1); System.out.println(p.hashCode()); //hashCodeは中身に依存 //ps.add(p); //コレを入れると大丈夫 System.out.println(ps.contains(p)); //なんとなくTrueな気がする } }