/ / Comparateur de longueur de chaîne personnalisée: quelle est mon erreur? - java, collections, treeset

Comparateur de longueur de chaîne personnalisé: quelle est mon erreur? - java, collections, treeset

J'ai défini un comparateur personnalisé pour trier la variable nommée (String) de mes objets par longueur.

Voici le code de ma classe de personne:

class MyNameLengthCompare implements Comparator<Person> {

@Override
public int compare(Person a, Person b) {
if(a.getName().length() > b.getName().length()) {
return -1;
} else if (a.getName().length() < b.getName().length()) {
return 1;
} else
return 0;
}

}

Puis dans ma méthode principale j'ai appelé Collections.sort(personList, new MyNameLengthCompare); et puis je l'ai ajouté à mon TreeSet myTreeSet.addAll(personList)

Mais ce n'est pas le tri par longueur de nom :(

Réponses:

3 pour la réponse № 1

Vous n’avez pas besoin de le trier avant de l’ajouter à l’arborescence. La seule chose qui importe est de savoir si l’arborescence contient ou non le comparateur.


1 pour la réponse № 2

Construisez-vous le TreeSet avec le comparateur? Dans le cas contraire, l'arbre ignore probablement votre comparateur et le tri précédent et utilise le tri naturel de son contenu, celui spécifié par sa méthode Comparable compareTo.


1 pour la réponse № 3

Eh bien, je pense qu'il y a le prochain numéro:

1) Collections.sort trie correctement votre liste.

2) Lorsque vous ajoutez cette collection à TreeSet, elle est triée une fois de plus et est actuellement utilisée Person.compareTo ();

3) Essayez de ne pas utiliser Comparator, essayez d'implémenter l'interface Comparable dans la classe Person et ajoutez directement une liste à l'arborescence, sans trier avec Collections.