/ / Custom String Length Comparator: Was ist mein Fehler? - Java, Sammlungen, Baumbestand

Custom String Length Comparator: Was ist mein Fehler? - Java, Sammlungen, Treeset

Ich habe einen benutzerdefinierten Vergleicher definiert, um die Namensvariable (String) meiner Objekte nach Länge zu sortieren.

Hier der Code aus meiner Personenklasse:

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;
}

}

Dann habe ich in meiner Hauptmethode angerufen Collections.sort(personList, new MyNameLengthCompare); und dann habe ich es zu meinem TreeSet hinzugefügt myTreeSet.addAll(personList)

Aber es ist nicht nach Länge des Namens sortiert :(

Antworten:

3 für die Antwort № 1

Sie müssen es nicht sortieren, bevor Sie es dem Baumsatz hinzufügen. Das einzige, was zählt, ist, ob der Baumsatz den Vergleicher enthält oder nicht.


1 für die Antwort № 2

Konstruieren Sie das TreeSet mit dem Comparator? Ist dies nicht der Fall, ignoriert der Baum wahrscheinlich Ihren Vergleicher und die vorherige Sortierung und verwendet die natürliche Sortierung des Inhalts, die von der Comparable compareTo-Methode angegeben wird.


1 für die Antwort № 3

Nun, ich denke, es gibt die nächste Ausgabe:

1) Collections.sort sortiert Ihre Liste korrekt.

2) Wenn Sie diese Sammlung zum TreeSet hinzufügen, wird sie noch einmal sortiert und zu diesem Zeitpunkt verwendet. Person.compareTo ();

3) Versuchen Sie Comparator nicht zu verwenden, versuchen Sie, Comparable-Schnittstelle in der Person-Klasse zu implementieren, und fügen Sie der Struktur direkt eine Liste hinzu, ohne mit Collections sortieren zu müssen.