트리 세트를 초기화하기 위해 자체 정의 된 비교기를 사용하여 min-heap으로 만듭니다. 1, 2, 3과 같은 작은 숫자의 중복을 제거하는 데는 문제가 없습니다. 그러나 숫자가 클 경우 트리 집합에 중복이 남아 있습니다. 여기에 내 코드입니다 : 나는 자바 테스트 -2147483647 -2147483647 1 일을 할 경우Comparator가 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;
}
}
}
}
, 나는 -2147483647 -2147483647 1. 얻을 그것은 뭔가 것 같아 나의 비교에 문제가 있습니다. 나는 디버그를 시도했다. -2147483647과 -2147483647을 비교하면 0을 반환하는 대신 compare 메서드가 1을 반환합니다. 누군가가 내게 이유를 알려주시겠습니까? 미리 감사드립니다.
저는 equals()로 바뀌 었습니다. 고맙습니다! –