Tôi có khoảng 8 biến ngày (java.util.Date) với các tên biến khác nhau. Cách hiệu quả nhất/tốt nhất để chọn (tối đa) gần đây nhất của những ngày này là gì?Cách lấy tập hợp biến số ngày gần đây nhất trong java
Trả lời
Lý tưởng nhất, lưu trữ chúng trong một bộ sưu tập - điều này có thể có ý nghĩa về mặt thiết kế chương trình của bạn anyway. Nếu bạn có, ví dụ: đối tượng Danh sách, bạn có thể làm:
Collections.max(dates);
Date
có thể so sánh, vì vậy thêm tất cả chúng vào một danh sách, và sử dụng Collections.max()
để tìm ngày (mới nhất) lớn nhất:
List<Date> dates = new ArrayList<Date>();
dates.add(foo);
dates.add(bar);
... etc
Date latest = Collections.max(list);
Trên thực tế, nếu bạn muốn nhận được ưa thích, bạn có thể làm điều này:
public static <T extends Comparable<T>> T max(T... items) {
return Collections.max(Arrays.asList(items));
}
Và gọi nó là như thế này:
Date latest = MyClass.max(foo, bar, fred);
Nhưng nó sẽ cũng làm việc cho bất kỳ Comparable
:
Integer biggest = MyClass.max(3, 7, 4, 1);
Đây là O (N log N), trong khi Collections.max là O (N). – Richante
Đặt chúng vào Danh sách và sử dụng Collections.max
.
Vì bạn đang lưu trữ tất cả các ngày của bạn trong các biến khác nhau, bạn cần phải làm điều gì đó giống như hàm sau varargs và vượt qua tất cả các biến của bạn tắt nó:
protected Date getMostRecentDate(Date ... dates) {
Arrays.sort(dates);
return myDateArray[dates.length - 1];
}
Sau đó, bạn muốn gọi nó là như vậy :
Date mostRecent = getMostRecentDate(date1, date2, date3 /* etc.*/);
Điều này không hiệu quả vì anh ta chỉ muốn nhận tối đa một lần. Sắp xếp lấy O (N * logN) trong khi một hoạt động tối đa là O (N). – Tudor
@Tudor chắc chắn, mặc dù trong tất cả sự công bằng, với N nhỏ (và tôi giả định rằng anh ta có nhỏ N b/c nếu không duy trì một bó toàn bộ các lĩnh vực khác nhau sẽ có rất nhiều công việc), sẽ không có nhiều khác biệt. – stevevls
Thêm tất cả vào một bộ sưu tập và sau đó sắp xếp nó, hoặc thêm chúng vào một bộ sưu tập đó là ra lệnh ở nơi đầu tiên, chẳng hạn như 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());
Hiệu quả của việc so sánh này với việc thực hiện với một bộ sưu tập thông thường như thế nào? – user6123723
Câu hỏi hay. Điều này sẽ là O (N log N), giống như thêm nó vào một danh sách và sau đó sắp xếp. Tuy nhiên, Collections.max (như được tham chiếu trong một số câu trả lời khác) là O (N) vì vậy điều đó chắc chắn hiệu quả hơn câu trả lời của tôi. – mongiesama
- 1. Lấy ngày gần đây nhất từ một loạt các ngày
- 2. Cách lấy tập tin được sửa đổi gần đây nhất
- 3. Cách lấy tệp gần đây nhất bằng tập lệnh batch trong windows
- 4. Get nhất ngày gần đây trong hồ sơ xml
- 5. SQL: Chọn ngày gần đây nhất cho mỗi danh mục
- 6. Nhận ngày Thứ Sáu gần đây nhất của SQL SQL
- 7. Oracle chọn bản ghi ngày gần đây nhất
- 8. Chọn các hàng SQL theo ngày gần đây nhất
- 9. MySQL - Chọn ngày gần đây nhất trong số các dấu thời gian có thể có?
- 10. tìm mục trong bộ sưu tập có ngày gần nhất
- 11. Đường ray: Hiển thị 5 bài đăng gần đây nhất trừ bài đăng gần đây nhất
- 12. SQL Query, chọn 5 gần đây nhất trong mỗi nhóm
- 13. Sử dụng VBScript để tìm ngày tệp gần đây nhất trong một thư mục
- 14. CHỌN 5 gần đây nhất SQL Server
- 15. MySQL: Nhận hồ sơ gần đây nhất
- 16. Lấy thư mục tài liệu gần đây trong .NET
- 17. Tìm ngày gần nhất trong SQL Server
- 18. Thẻ gần đây nhất trước khi tip trong mercurial
- 19. Sách gần đây về Java JVM?
- 20. Lấy các hồ sơ gần đây nhất trong một truy vấn
- 21. "Mở gần đây" trong Emacs
- 22. Lấy số ngày trong tháng hiện tại trong Java
- 23. Tính ngày làm việc gần nhất trong Postgres
- 24. MySQL - Các cột gần đây nhất trong bảng khác
- 25. kỷ lục gần đây nhất trong một trái tham gia
- 26. Rails 3. Nhận cập nhật gần đây nhất
- 27. Bản ghi gần đây nhất, trước ngày, theo danh mục: tối ưu hóa
- 28. Tìm số gần nhất trong một mảng
- 29. Chỉ hiển thị ngày gần đây nhất từ bảng MySQL đã tham gia
- 30. Chọn hàng với ngày gần đây nhất cho mỗi người dùng
Nhiều lần hoặc chỉ một lần? – Tudor
chỉ một lần. tất cả các giá trị biến ngày có thể khác nhau. Tôi chỉ cố gắng tìm ngày gần đây nhất hiệu quả để hiển thị trên trang jsp. – user6123723
Giá trị mới nhất của bạn luôn là số tiền tối đa hoặc bạn cần phải tính cho các ngày trong tương lai? – eabraham