Я использовал самоопределяемый компаратор для инициализации treeet, делая его мини-кучей. Он отлично работает, чтобы удалить дубликаты небольших чисел, таких как 1, 2, 3. Но когда числа большие, дубликаты остаются в деревьях. Вот мой код:Компаратор не удаляет дубликаты номеров в TreeSet
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 Test -2147483647 -2147483647 1 1, я получаю -2147483647 -2147483647 1. Похоже, что-то не так с моим компаратором. Я попытался отлаживать. Когда сравниваются -2147483647 и -2147483647, вместо того, чтобы возвращать 0, метод сравнения возвращает 1. Может ли кто-нибудь рассказать мне, почему? Заранее спасибо!
Я изменил на equals(), это сработало! Спасибо! –