java-Sortieren mit anonymer Klasse
Habe ich der Klasse, in die ich Sortieren einer Liste.
import java.util.*;
public class First
{
private static HashMap<String,Second> msgs;
public static void main(String[] args)
{
List<String> ls=new ArrayList<String>();
ls.add("fourth");
ls.add("2");
ls.add("second");
ls.add("first");
ls.add("third");
ls.add("1");
Iterator it=ls.iterator();
//before sorting
while(it.hasNext())
{
String s=(String)it.next();
System.out.println(s);
}
Collections.sort(ls, new Comparator(){
public int compare(Object o1, Object o2) {
return -1;
//it can also return 0, and 1
}
});
System.out.println(" ");
//after sorting
Iterator iti=ls.iterator();
while(iti.hasNext())
{
String s=(String)iti.next();
System.out.println(s);
}
}
}
Nachdem das Programm auszuführen, bekomme ich diese Werte:
1
third
first
second
2
fourth
Meine Frage ist, was das Verhalten der Kollektion.Funktion sort() hier. Nach der Rückkehr von -1 Funktion vergleichen, so erhalten wir die umgekehrte Reihenfolge der Liste. Dann, wie können wir andere Reihenfolgen? Was ist die Rolle der Rückgabe von 0 und 1?
- Was willst du als Ausgabe ?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Schließlich habe ich geändert, die Funktion Sortieren auf diese Weise sortiert man Daten.
Können Sie anonyme Klasse auf diese Weise:
Hier ist, was in der javadoc sagt:
Ihre Komparator-Umsetzung nicht respektiert, dieser Vertrag, so ist das Ergebnis unbestimmt. Es muss wieder ein negativer Wert, wenn es der Ansicht o1 kleiner als o2. Es muss wieder einen positiven Wert, wenn es der Ansicht o1 größer zu sein als die von o2. Und es muss 0 zurückgeben, wenn er der Ansicht o1 gleich o2. Und es müssen natürlich konsistent sein. Wenn o1 < o2, dann o2 > o1. Wenn o1 < o2 und o2 < o3, dann o1 < o3.
java.util.Comparator
Klasse sagt incompare
Methode java doc:benutzen Sie folgenden code:
Dieser code muss funktionieren.Sie können ändern compare-Methode für mehr Flexibilität.
compareTo
Methode inString
Klasse sagt in seiner java-doc:Es ist zu sagen, dass die o1 gleich o2 oder o1 ist größer als o2.
Ihre anonymen comparator derzeit sagt, dass o1 kleiner als o2, für jeden möglichen Wert von
o1
undo2
. Das macht einfach keinen Sinn, und bewirkt, dass das Verhalten vonsort
unberechenbar.Einen gültig comparator implementieren muss
compare(Object, Object)
Methode, so dass es verhält sich nach den Anforderungen derComparator
- Schnittstelle.Wenn Ihr echtes Ziel ist eine Umkehrung der Reihenfolge der Elemente in einer Liste, dann verwenden Sie nicht
sort
. VerwendenCollections.reverse()
aus der Javadoc von Komparator
So definieren Sie die Funktionalität von weniger als,gleich oder größer als die sich für Ihre Klasse ,Sie fehlen gleich und größer als Funktionalität.