在日期列表中查找最接近目标的日期的最佳方法?

我有一个日期对象列表和一个目标日期。我想在列表中找到最接近目标日期的日期,但仅找到目标日期之前的日期。

示例: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

回到顶部