J'ai construit un comparateur personnalisé très simple, que j'utilise avec un TreeSet afin de trier les chaînes par longueur dans ce TreeSet.Pourquoi String est égal à() retourne false (Custom Comparator impliqué)?
Je n'arrive pas à trouver la raison pour laquelle renvoie la valeur false même si les deux chaînes s1 et s2 contiennent la même valeur. Eclipse "variables vue" montre les lettres sont les mêmes dans les deux chaînes, mais le "id" est différent, je suppose que c'est pourquoi retourne égal Faux. Au fait, qu'est-ce que c'est que id=" "
? Est-ce une sorte de pointeur vers les données de l'objet String?
public class MyComparator implements Comparator<String> {
public int compare(String s1, String s2) {
if(s1.length()<s2.length()) return -1;
else if (s1.length()>s2.length()) return 1;
return 0;
else if (s1.equals(s2)) return 0; //?? ALWAYS RETURNS FALSE
else if (s1.toString().equals(s2.toString()))//SAME PROBLEM HERE (test)
else return -1;
}
public boolean equals(String s) {
if (this.equals(s)) return true;
else return false;
}
}
Maintenant, voici où j'utilise cette Comparator personnalisée:
combinations = new TreeSet<String>(new MyComparator());
Je remplis des combinaisons avec plusieurs chaînes, construit avec la méthode substring()
.
En raison du problème mentionné précédemment, les combinaisons contiennent des doublons.
Lorsque je ne mets AUCUN Comparateur personnalisé pour ce TreeSet, il n'y a plus de duplicata (c'est ce que je veux) mais il est trié par ordre alphabétique ce qui est normal mais pas mon but.
Est-ce pas votre mise en œuvre d'égal à égal() se coincer dans une récursion infinie? –
pouvez-vous élaborer sur ce que vous voulez que votre comparateur fasse? Ce n'est pas clair pour moi ce que vous essayez d'accomplir. Peut-être poster quelques exemples de données de tri de sortie. –
Vous pouvez également vous intéresser à l'utilisation de la méthode compareTo String. http://download.oracle.com/javase/1.4.2/docs/api/java/lang/String.html#compareTo(java.lang.String) EDIT: Le lien n'est pas analysé correctement à cause de ")" à la fin, mais vous pouvez trouver compareTo sur cette page. –