Map ではまった

Map や Set を使う場合、クラスTは、
hashCode(), equals(Object o) をオーバーライドしている必要がある。
equals()について2つのオブジェクトが等しいなら、両者のhashCode() が一致する。

ジェネリックを使っていても、equals(T t)は決して呼び出されないのに注意。
そのようにオーバーライドしていると、等しいはずのものが(Objectクラスのequals()によって)等しくない、と判定されてしまう。