Sietse de Kaper解决方案假设一个反向排序列表,绝对不是最自然的东西
从你的例子来看,
target date = 2008-10-03
list = 2008-10-01 2008-10-02 2008-10-04
如果另一个开发人员以一种天真的方式使用你的方法,他将得到2008-10-01,这不是预期的
>不要对列表的顺序做出假设.
>如果您出于性能原因,请尝试遵循最自然的约定(按升序排序)
>如果你真的必须遵循另一个约定,你真的应该记录下来.
private Date getDateNearest(List 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