我在尋找更好的方法來檢查的java.util.Date
對象(返回給我的ArrayList
)。情況是,我返回了日期的List
,並且我想知道我手邊的日期是否在我返回的日期的List
之內。檢查日期列表是否包含特定日期
目前我在做的是循環列表並使用JodaTime來比較日期。
注:比較日期(不是時間部分)時只應考慮日期部分。
我在尋找更好的方法來檢查的java.util.Date
對象(返回給我的ArrayList
)。情況是,我返回了日期的List
,並且我想知道我手邊的日期是否在我返回的日期的List
之內。檢查日期列表是否包含特定日期
目前我在做的是循環列表並使用JodaTime來比較日期。
注:比較日期(不是時間部分)時只應考慮日期部分。
寫你自己的Comparator。您可以使用它來執行Date
對象
public class MyDateComparator implements Comparator<Date> {
protected static final DateFormat DATE_FORMAT = new SimpleDateFormat("dd/MM/yyyy");
public int compare(Date d1, Date d2) {
return DATE_FORMAT.format(d1).compareTo(DATE_FORMAT.format(d2));
}
}
Date myDate = ...
List<Date> listOfDates = ...
Collections.sort(listOfDates);
int index = Collections.binarySearch(listOfDates, myDate, new MyDateComparator());
if (index >= 0) {
// you found me
}
的個體比較(類型與iPad上的脂肪手指,搖3個月大睡,對未成年人的錯誤道歉)
您可以修改比較器,或根據需要提供不同的比較器。我不喜歡二分查找的唯一方法就是它不會返回一個數組,但這是另一個問題 – MadProgrammer 2012-07-28 06:04:47
我喜歡使用Java Comparator/Comparable,因爲它是推薦的方法。但不確定是否應該將java.util.Date轉換爲JodaTime的DateTime,並使用JodaTime在比較器中進行日期比較。你拿這個? – 2012-07-28 09:51:36
這完全取決於你。您必須權衡時間成本(在開發時間和執行時間內)以及解決方案的說服力。使用比較器/可比API的主要原因是它在整個Java API中得到很好的支持。在一天結束時,Joda時間仍然只使用Comarator API,它只是更豐富,然後我演示的那個;) – MadProgrammer 2012-07-28 09:59:44
如果兩個java.util.Date對象解析爲相同的毫秒,則它們是equal()。所以,你可以使用List.contains():
http://docs.oracle.com/javase/6/docs/api/java/util/List.html#contains%28java.lang.Object%29 http://docs.oracle.com/javase/6/docs/api/java/util/Date.html#equals%28java.lang.Object%29
List<Date> dates = ...
Date targetDate = ...
if (dates.contains(targetDate)) { ... }
或者,如果你知道列表進行排序,你可以使用Collections.binarySearch()
你想一個HashMap/HashSet的這樣你可以在O(1)時間找到它? – 2012-07-28 01:50:53
請詳細說明。你有一個java.util.Date對象列表嗎?字符串?一些其他類型的日期表示? – dnault 2012-07-28 01:52:40
我有一個java.util.Date對象列表。 – 2012-07-28 01:54:33