2012-04-12 3 views
5

Ich habe etwa 8 Datum Variablen (java.util.Date) mit verschiedenen Variablennamen. Was ist der effizienteste/beste Weg, das neueste (max) dieser Daten auszuwählen?Wie bekomme ich die letzte einer Reihe von Datum Variablen in Java

+0

Mehrere Male oder nur einmal? – Tudor

+0

nur einmal. Alle Datumsvariablenwerte können unterschiedlich sein. Ich versuche nur, das neueste Datum effizient zu finden, um es auf einer JSP-Seite anzuzeigen. – user6123723

+0

Ist das neueste immer das Maximum oder müssen Sie zukünftige Daten berücksichtigen? – eabraham

Antwort

17

Idealerweise speichert sie in einer Sammlung - das könnte sowieso Sinn in Bezug auf Ihre Programmgestaltung machen. Wenn Sie z.B. ein List-Objekt, können Sie tun:

Collections.max(dates); 
2

Date vergleichbar ist, so fügen sie alle zu einer Liste, und verwenden Sie Collections.max() die größte (letzte) Datum zu finden:

List<Date> dates = new ArrayList<Date>(); 
dates.add(foo); 
dates.add(bar); 
... etc 
Date latest = Collections.max(list); 

Eigentlich, wenn Sie Lust bekommen möchten, können Sie dies tun:

public static <T extends Comparable<T>> T max(T... items) { 
    return Collections.max(Arrays.asList(items)); 
} 

Und es so nennen:

Date latest = MyClass.max(foo, bar, fred); 

Aber es wird arbeiten auch für jede Comparable:

Integer biggest = MyClass.max(3, 7, 4, 1); 
+2

Dies ist O (N log N), während Collections.max O (N) ist. – Richante

6

sie in einer Liste setzen und Collections.max verwenden.

3

Da Sie alle Ihre Termine in verschiedenen Variablen sind zu speichern, müssen Sie so etwas wie die folgende varargs Funktion tun und alle Ihre Variablen abgehen, um es:

protected Date getMostRecentDate(Date ... dates) { 
    Arrays.sort(dates); 
    return myDateArray[dates.length - 1]; 
} 

Dann würden Sie es wie so nennen :

Date mostRecent = getMostRecentDate(date1, date2, date3 /* etc.*/); 
+0

Dies ist nicht effizient, da er nur einmal das Maximum erreichen möchte. Das Sortieren dauert O (N * logN), während eine einzige maximale Operation O (N) ist. – Tudor

+0

@Tudor sicher, obwohl in aller Fairness, mit kleinen N (und ich nehme an, dass er kleine N b/c hat, sonst eine ganze Reihe von verschiedenen Feldern zu halten wird eine Menge Arbeit sein), wird es nicht sein viel Unterschied. – stevevls

1

sie alle zu einer Sammlung hinzufügen und es dann sortieren, oder sie zu einer Sammlung, die in erster Linie, wie in Auftrag gegebene Priorityqueue:

PriorityQueue<Date> dateQ = new PriorityQueue<Date>(); 
dateQ.add(someDate); 
dateQ.add(anotherDate); 
dateQ.add(thirdDate); // etc... 
System.out.println("Max date is: " + dateQ.peek()); 
+0

Wie vergleicht sich die Effizienz mit einer Implementierung mit einer regelmäßigen Sammlung? – user6123723

+0

Gute Frage. Dies sollte O (N log N) sein, genauso wie es zu einer Liste hinzugefügt und dann sortiert wird. Collections.max (wie in einigen anderen Antworten angegeben) ist jedoch O (N), also ist es definitiv effizienter als meine Antwort. – mongiesama

Verwandte Themen