如果我有 5,000 个或更多类型对象的内存集合SampleObject
class SampleObject {
...
Date getLastRefreshDate()
Status getCurrentStatus()
}
我想快速获取刷新日期早于某个值的对象的子列表,并且还能够快速获取具有特定状态的对象,什么数据结构/算法会有用?迭代列表并进行比较是否足够快?如果列表增长到 25,000 或更多怎么办?
如果我有 5,000 个或更多类型对象的内存集合SampleObject
class SampleObject {
...
Date getLastRefreshDate()
Status getCurrentStatus()
}
我想快速获取刷新日期早于某个值的对象的子列表,并且还能够快速获取具有特定状态的对象,什么数据结构/算法会有用?迭代列表并进行比较是否足够快?如果列表增长到 25,000 或更多怎么办?
ATreeMap<Date, SampleObject>
可以很容易地完成“比”某个日期“更早”的工作——你只需使用它headMap
来获取所有对象都比某个值更早。
你需要一个单独的Map<Status, List<SampleObject>>
(或者,如果你可以使用第三方库,一个 Guava Multimap
)来跟踪具有某些特定状态的对象,但我认为如果你不愿意支付第二个数据结构是不可避免的线性搜索。
NavigableSet和NavigableMap类提供了执行此操作的方法。
NavigableSet
已经提供了类似headSet
and的方法tailSet
来获取其他给定元素之前或之后的所有元素。您可以将日期标准用作Comparator
您班级的自然顺序(如果尚未提供)SampleObject
。
除了其他有用的方法,如lower
, floor
,ceiling
和higher
.
同样NavigableMap
提供类似的方法,如 headMap 和 tailMap 来执行完全相同的切片。