- Mein Darm sagt mir, dass Clone() schneller sein wird.
- Warum versuchen Sie es nicht mit einem schnellen Benchmark [*]?
- Verwenden Sie nur den langen Wert
date.getTime()
, wenn Sie keine Kalenderberechnungen durchführen müssen.
[*]
private static final int N = 100000;
public static void main(final String[] args) throws Exception {
final Date date = new Date();
{
final long start = System.currentTimeMillis();
for (int i = 0; i < N; i ++) {
final Date date2 = (Date) date.clone();
}
final long end = System.currentTimeMillis();
System.out.println("Clone: " + (end - start) + " ms");
}
{
final long start = System.currentTimeMillis();
for (int i = 0; i < N; i ++) {
final Calendar cal = Calendar.getInstance();
cal.setTime(date);
final Date date2 = cal.getTime();
}
final long end = System.currentTimeMillis();
System.out.println("Caldendar.setTime: " + (end - start) + " ms");
}
}
Ergebnisse:
Clone: 13 ms
Caldendar.setTime: 317 ms
PS Ich bin nicht sicher, wenn Sie wirklich ein Calendar
benötigen, oder eine Date
, so fühlen sich frei zu Ändern Sie den Test ...
(In Reaktion auf die Kommentar: Testgenauigkeit zu verbessern, können Sie auch einzeln die Tests ausgeführt werden können, erhöhen Sie den Wert von N, ...)
warum nicht nur Test und beide Fälle Profil? – Tedil
Ich könnte aber das Problem ist, wenn ich einen gültigen Komponententest schreiben kann. Ich lese, dass der Klon() langsamer ist als der neue Operator (bei Verwendung von JIT) in Java 1.4 ich glaube ... ich konnte nicht finden, wenn dies in Java 5 und später ... –
'Kalender # setTime (Date)' zurückgibt 'void', Ihr Beispiel ist nicht gültig – yegor256