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



