I used a self-defined comparator to initialize treeset, making it a min-heap. It works fine to remove duplicates of small numbers such as 1, 2, 3. But when the numbers are large, duplicates remain in the treeset. Here's my code:
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;
}
}
}
}
If I do java Test -2147483647 -2147483647 1 1, I get -2147483647 -2147483647 1. It seems like something is wrong with my comparator. I tried to debug. When -2147483647 and -2147483647 are compared, instead of returning 0, the compare method returns 1. Could someone please tell me why? Thank you in advance!