J'ai utilisé un comparateur auto-défini pour initialiser treeet, ce qui en fait un min-heap. Cela fonctionne bien pour supprimer les doublons de petits nombres tels que 1, 2, 3. Mais lorsque les nombres sont grands, les doublons restent dans l'arborescence. Voici mon code:Le comparateur ne supprime pas les doublons de nombre dans 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;
}
}
}
}
Si je fais test java -2147483647 -2147483647 1 1, je reçois -2147483647 -2147483647 1. Il semble que quelque chose ne va pas avec mon comparateur. J'ai essayé de déboguer. Lorsque -2147483647 et -2147483647 sont comparés, au lieu de renvoyer 0, la méthode de comparaison renvoie 1. Est-ce que quelqu'un pourrait me dire pourquoi? Merci d'avance!
J'ai changé pour égaler(), cela a fonctionné! Je vous remercie! –