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
Antwort
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);
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);
Dies ist O (N log N), während Collections.max O (N) ist. – Richante
sie in einer Liste setzen und Collections.max
verwenden.
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.*/);
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
@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
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());
Wie vergleicht sich die Effizienz mit einer Implementierung mit einer regelmäßigen Sammlung? – user6123723
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
Mehrere Male oder nur einmal? – Tudor
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
Ist das neueste immer das Maximum oder müssen Sie zukünftige Daten berücksichtigen? – eabraham