假設我有一個包含Date
字段的消息列表List<Message> conversation
。在包含日期的對象列表中搜索
public class Message {
private Date time;
...
}
而且我想找到一個時間跨度內的所有消息,由兩個Date
對象,fromDate
和toDate
分隔:
public List<Message> getMessagesInRange(final Date fromDate, final Date toDate, final List<Message> conversation) {
List<Message> messagesInRange = new ArrayList<Message>();
...
return messagesInRange;
}
郵件列表是按時間排序(舊郵件被前新加那些)。現在,我可以從頭開始遍歷整個列表,並填充messagesInRange
,添加指定範圍內的所有消息。一旦我到達比toDate
更近的日期,我可以結束迭代,因爲我知道列表已排序。
但是也許在指定的範圍內沒有消息,並且從頭開始迭代是浪費時間。我想知道一個有效的方式來獲取列表中第一條消息的引用,並且從那裏開始迭代。也許這可以用二進制搜索來完成?
@yts可以有情況時收集沒有確切* *匹配,不過分的範圍是不是空的。 – ursa 2014-11-23 00:49:21
@ursa實際上,比較器方法確實起作用,因爲返回的負索引可用於查找帶有日期旁邊的消息 – yts 2014-11-23 18:44:47