TreeSet は compareTo を使用します。これを試してください:
public class A {
private int i;
A(int i) {
this.i = i;
}
@Override
public boolean equals(Object t) {
if (this == t)
return true;
if (!( t instanceof A))
return false;
return (this.i == ((A)t).i);
}
public static void main(String[] args) {
List<A> remove = Arrays.asList(new A(123), new A(789));
Set<A> set = new TreeSet<A>(new Comparator<A>() {
@Override
public int compare(A o1, A o2) {
return o1.i - o2.i;
// return 0; // everything get removed
}
});
set.add(new A(123));
set.add(new A(456));
set.add(new A(789));
set.add(new A(999));
set.removeAll(remove);
for (A a : set) {
System.out.println(a.i);
}
System.out.println("done");
}
}
Comparator が常に 0 を返すようにすると、すべてが削除されます! Comparator を使用せずに Comparable を実装する場合も同様です。
TreeSet は、getEntry で compareTo を使用する TreeMap に基づいています。
TreeSet の Javadoc で (最終的に) 読むことができます:
... Set インターフェイスは equals 操作に関して定義されていますが、TreeSet インスタンスはその compareTo (または比較) メソッドを使用してすべての要素の比較を実行します...
[]]