在日期列表中查找最接近目标的日期的最佳方法?
我有一个日期对象列表和一个目标日期。我想在列表中找到最接近目标日期的日期,但仅找到目标日期之前的日期。
示例:2008-10-1 2008-10-2 2008-10-4
目标日期为2008-10-3,我想获得2008-10-2
最好的方法是什么?
回答:
Sietse de Kaper解决方案采用了 反向 排序的列表,绝对不是最自然的解决方案
Java中的自然排序顺序遵循递增的自然顺序。(请参阅Collection.sort
http://java.sun.com/j2se/1.5.0/docs/api/java/util/Collections.html#sort(java.util.List)文档)
从您的例子来看,
目标日期= 2008-10-03 清单= 2008-10-01 2008-10-02 2008-10-04
如果另一个开发人员以幼稚的方式使用您的方法,他将获得2008-10-01的期望值
- 不要假设列表的顺序。
- 如果出于性能原因必须这样做,请尝试遵循最自然的惯例(升序排列)
- 如果您确实必须遵循另一条约定,那么您确实应该记录下来。
private Date getDateNearest(List<Date> dates, Date targetDate){ Date returnDate = targetDate
for (Date date : dates) {
// if the current iteration'sdate is "before" the target date
if (date.compareTo(targetDate) <= 0) {
// if the current iteration's date is "after" the current return date
if (date.compareTo(returnDate) > 0){
returnDate=date;
}
}
}
return returnDate;
}
编辑-我也喜欢Treeset的答案,但我认为它可能会稍微慢一些,因为它等效于对数据进行排序然后查找==
nlog(n)进行排序,然后文档暗示它是log(n)以便进行访问,因此那应该是nlog(n)+ log(n)vs n
以上是 在日期列表中查找最接近目标的日期的最佳方法? 的全部内容, 来源链接: utcz.com/qa/420803.html