2016-12-27 2 views
2

Ich habe eine DB-Abfrage mit ORDERED BY und die entsprechende Ergebnismenge wird zu einer Liste von benutzerdefinierten Objekten verarbeitet.Java binäre Suche bereits sortierte Liste

Die Objektklasse implementiert nicht vergleichbar. Es überschreibt jedoch equals() und hashcode() mit dem gleichen Feld wie in ORDERED BY verwendet.

Da die Liste bereits sortiert, wie kann ich eine binäre Suche in der Liste tun, um die sortierten Feld als Schlüssel und ohne vergleichbare oder Komparator mit?

+0

Sehr nette Frage. –

Antwort

0

Um vorhandene JDK-Methoden wie Collections.binarySearch zu verwenden, müssen Sie Comparator<YourCustomClass> implementieren (da Ihre Klasse Comparable nicht implementiert).

Wenn Sie nicht Comparator<YourCustomClass> implementieren möchten, müssen Sie die gesamte Binärsuchlogik selbst implementieren, was mehr Arbeit bedeutet, als nur die Implementierung von Comparator<YourCustomClass>.

3

In einem Wort - Sie können nicht. Zumindest nicht mit der binären Suche des JDK. Comparable s und Comparator s sind die Art, wie Java die Reihenfolge ausdrückt. Dies sollte jedoch kein Problem sein. Auch wenn Sie die Datenklasse nicht ändern können, können Sie immer Ihre eigene (anonyme) Comparator:

int index = Arrays.binarySearch(myArray, 
           myObject, 
           Comparator.comparing(MyClass::getSomeField)); 
+0

Also muss ich nicht zuerst das Array sortieren, da es bereits sortiert ist oder ich muss auch sortieren und dann binarysearch method ?? –

+0

@SudhanshuGaur laut OP, das Array ist bereits sortiert, es hat also keinen Sinn, es erneut zu sortieren. – Mureinik

+0

wird die Sortierreihenfolge wichtig ich meine, wenn meine sortierten Daten in aufsteigender oder absteigender Reihenfolge binarysearch Methode Arbeit für beide Fälle? Ich frage das, weil wir bei der Sortierung auch den Komparator passieren müssen und da wir nicht nach Komparator sortiert werden, wird es ein Problem geben oder nicht? –