Ich verwende Hibernate, um einen Satz von Objekten aus der Datenbank abzurufen und Order.asc (studentName) zu verwenden, um die aufsteigende Reihenfolge beizubehalten. Ich verwende Comparator, um eine Objektliste manuell zu sortieren, wie unten.Ist Order.asc (<String>) in Hibernate und "compareTo" in Vergleichbare Schnittstelle verhalten sich gleich?
class NameComparator implements Comparator<Student>
{
public int compare(Student z1, Student z2)
{
return z1.getName().compareTo(z2.getName());
}
}
Collections.sort(studentList, new NameComparator());
Aber die Reihenfolge der zurückgegebenen Listen sind in diesen beiden Fällen nicht identisch.
Die erste Zeile mit Hibernate sortiert ist, wird die zweite Zeile mit NameComparator
aaa3, aaa4, bbb5, BBB7, bbb8, BBB8
sortiert
aaa3, BBB7, BBB8, aaa4, bbb5, bbb8
Was ist der Grund dafür?
Die Datenbank verwendet wahrscheinlich eine bestimmte Sortierfolge zum Sortieren (wobei beispielsweise die Reihenfolge [a, E, i, é, A] [A, a, E, é, i] wäre), während Ihr reiner lexikographischer Komparator dies wäre sortiere sie als [A, E, a, i, é]. –
Bitte füge ein einfaches Beispiel mit zwei sortierten Listen hinzu. –
@JBNizet Ja, das muss der Grund sein. –