[Comperator] ArrayList mit Date Veriable sortieren

wuaschtikus

Grünschnabel
Liebe Forummitglieder,

Ich muss eine ArrayList mit GeoDaten und Timestamps nach Timestamp sortieren. Nach meiner Recherche müsste das mit dem Comperator gehen... Nur leider fehlt mir ein bisschen die Ahnung von den Compare Sachen bzw. kann ich mir das nicht ganz vorstellen wie das in der Theorie aussieht.

Was muss ich also tun? Ich bin eig. kein Anfänger mehr aber da hänge ich irgendwie komplett - ich wäre dankbar für ein bisschen Hilfe. Ich weiß es gibt relativ viele Threads dazu - ich will aber auf Nummer sicher gehen und meine eigenen Fragen stellen.

Die Klasse in der ich die ArrayList sortieren will:

Java:
import java.util.*;
public class DateSort{
    static final Comparator<GeoDaten> GEO_ORDER =
                                 new Comparator<GeoDaten>() {
        public int compare(GeoDaten g1, GeoDaten g2) {
            return g1.getDate.compareTo(g2.getDate()); //getDate() returns Date() of active GeoObject
        }
    };


    public static void main(String[] args) {
        List<GeoDaten>g = getGeoDaten(); //returns ArrayList with Geodata
        Collections.sort(g, GEO_ORDER);
        List<GeoDaten> sortedGeodata = g;
    }
}

Meine Fragen:
Ist das alles?
Mit compareTo() bekomm ich die Werte 1 oder -1? Das reicht aus um die ArrayList zu sortieren? Oder muss ich noch was machen?

Danke im Voraus!
lg Martin
 
Zuletzt bearbeitet:
Wenn dein Comparator die richtigen Werte ausgibt (hab ich nicht nachgeprüft), dann ist das alles.

Du solltest allerdings in Zeile 6 noch nach g1.getDate die Klammern () für den Methodenaufruf einfügen.
Java:
 return g1.getDate().compareTo(g2.getDate()); //getDate() returns Date() of active GeoObject

PS: Schau doch mal in die JavaDoc von Comparator und der Methode compareTo() aus dem Interface Comparable. Wenn du dir immer noch unsicher bist, schau mal http://openbook.galileocomputing.de/javainsel9/javainsel_09_001.htm und http://openbook.galileocomputing.de...09_002.htm#mjecf5de0c4d43d2ba0f83dfce865d017e an.
 
ok und nur zum verständnis - der Comperator liefert NUR die vergleichswerte mit return comperTo() zurück. Das sortieren wird dann von sort() übernommen.

In meiner GeoDaten Klasse muss ich nichts explizit angeben oder deklarieren?
Hier kommt es nur auf die getDate() Methode an, sehe ich das richtig?
 
Das ist so korrekt. CompareTo liefert nur <0; =0;>0 zurück. Und sort benutzt dann einen bestimmten Algorithmus (Mergesort) der diese Information benutzt.

Wenn du eine grundsätzliche Sortierung für deine GeoDaten-Klasse machen willst, musst du das Interface Comparable in der Klasse GeoDaten implementieren. Und du solltest dann auch die equals und hashCode-Methode implementieren, damit compareTo == 0 und equals das gleiche Ergebnis liefern.
 
Zurück