私は、ツリーセットを初期化するために自己定義コンパレータを使用し、最小ヒープにしました。 1、2、3などの小さな数字の重複を削除するには問題ありません。しかし、数字が大きい場合、重複はツリーセットに残ります。ここに私のコードだ:何かが私のコンパレータと間違っているようコンパイラはツリーセット内の数値の重複を削除しません
public class Test {
public static void main(String[] args) {
Set<Integer> treeset = new TreeSet<>(new MyComparator());
Integer[] array = new Integer[args.length];
for (int i = 0 ; i < args.length ; i ++) {
array[i] = Integer.valueOf(args[i]);
treeset.add(array[i]);
}
for (Integer i : treeset) {
System.out.print(i + " ");
}
}
public static class MyComparator implements Comparator<Integer> {
@Override
public int compare(Integer i1, Integer i2) {
if (i1 < i2) {
return -1;
} else if (i1 == i2) {
return 0;
} else {
return 1;
}
}
}
}
私はJavaのテスト-2147483647 -2147483647 1 1をすれば、私は-2147483647 -2147483647 1を得るに思えます。私はデバッグしようとしました。 -2147483647と-2147483647を比較すると、0を返す代わりにcompareメソッドが1を返します。前もって感謝します!
私はequals()に変更されました。ありがとうございました! –