微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

例:
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)文档)

从你的例子来看,

target date = 2008-10-03 
list = 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

原文地址:https://www.jb51.cc/java/126489.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐