bir tarih parametreleri kümesinin en son nasıl elde edilir Farklı değişken adlarıyla yaklaşık 8 tarih değişkenine (java.util.Date) sahibim. Bu tarihlerin en güncel (en çok) seçimini yapmanın en etkili/en iyi yolu nedir?java
java
cevap
bir koleksiyon saklayabilirsiniz - bu zaten program tasarım açısından mantıklı olabilir: aynı zamanda herhangi Comparable
için çalışıyorum. Eğer varsa Bir Liste nesnesi, yapabileceğiniz:
Collections.max(dates);
Date
karşılaştırılabilir, böylece bir listeye hepsini ekleyin ve en büyük (en son) tarihi bulmak için Collections.max()
kullanın: Eğer fantezi olsun isterse, bunu yapabilir Aslında
List<Date> dates = new ArrayList<Date>();
dates.add(foo);
dates.add(bar);
... etc
Date latest = Collections.max(list);
:
Date latest = MyClass.max(foo, bar, fred);
Ama olacak:
public static <T extends Comparable<T>> T max(T... items) {
return Collections.max(Arrays.asList(items));
}
Ve böyle diyoruz İdeal
Integer biggest = MyClass.max(3, 7, 4, 1);
Bu, O (N log N), Collections.max ise O (N). – Richante
bir List koyun ve Collections.max
kullanın.
protected Date getMostRecentDate(Date ... dates) {
Arrays.sort(dates);
return myDateArray[dates.length - 1];
}
Sonra şöyle derdim:
farklı değişkenler tüm tarihleri depolamak yaptığınızdan, varargs aşağıdaki fonksiyonu gibi bir şey yapmak ve buna kapalı tüm değişkenleri geçmesi gerekiyor :
Date mostRecent = getMostRecentDate(date1, date2, date3 /* etc.*/);
Bu sadece bir kez maksimum almak istediğinden, verimli değil. Sıralama, tek bir maksimum işlem O (N) iken O (N * logN) alır. – Tudor
@Tasarım, her ne kadar adalet içinde olsa da, küçük N ile (ve küçük olduğunu varsayalım, aksi takdirde bir çok farklı alanın bir kısmını sürdürmesi çok fazla iş olacaktır), olmayacak. çok fark var. – stevevls
bir koleksiyona hepsini ekleyin ve sonra sıralamak veya bu tür PriorityQueue olarak ilk etapta sipariş bir koleksiyona, bunları ekleyin:
PriorityQueue<Date> dateQ = new PriorityQueue<Date>();
dateQ.add(someDate);
dateQ.add(anotherDate);
dateQ.add(thirdDate); // etc...
System.out.println("Max date is: " + dateQ.peek());
Bunun verimliliği, düzenli bir koleksiyonla yapılan bir uygulama ile nasıl karşılaştırılır? – user6123723
İyi soru. Bu, O (N log N) olmalı, bir listeye ekleyip sıralamaya benzer. Bununla birlikte, Collections.max (diğer birçok cevapta atıfta bulunularak) O (N) olduğundan cevabımdan kesinlikle daha verimli olur. – mongiesama
Birkaç kez mi yoksa sadece bir kez mi? – Tudor
sadece bir kez. tüm tarih değişken değerleri farklı olabilir. Sadece bir jsp sayfasında görüntülemek için en son tarihi verimli bir şekilde bulmaya çalışıyorum. – user6123723
En son herzaman maksimum mu, yoksa gelecek tarihleri hesaba katmanız mı gerekiyor? – eabraham