へんなSet

java.util.Set って、同じインスタンスを複数持たないよね。

Object o = new Object();
Set set = new HashSet();
set.add(o);
set.add(o);
set.add(o);
set.add(new String());

assert set.size() == 2;

違うインスタンスであれば、全部はいる。

Set set = new HashSet();
set.add(new Object());
set.add(new Object());
set.add(new Object());
set.add(new String());

assert set.size() == 4;

違うインスタンスであっても、同じクラスのインスタンスは複数入らないコレクションって、標準じゃぁ、ないよねー? 作るしかないかー。

ClassSet set = new HashClassSet();
set.add(new Object());
set.add(new Object());
set.add(new Object());
set.add(new String());

assert set.size() == 2;

こんなん。

追記

Set#add() の仕様を見ていて思った。equalsがtrueであれば入らないのか…。でもなんか気持ち悪いなー、equalsをこんな風にオーバーライドするのは…。