如果我有5,000个或更多类型为SampleObject
的对象的内存集合
class SampleObject {
...
Date getLastRefreshDate()
Status getCurrentStatus()
}
我想快速获取刷新日期早于某个值的对象子列表,并且还能够快速获取具有特定状态的对象,哪种数据结构/算法有用?迭代列表并进行足够快速的比较?如果列表增长到25,000或更多怎么办?
答案 0 :(得分:2)
TreeMap<Date, SampleObject>
可以轻松完成某个日期“早于”某个日期的工作 - 您只需使用headMap
来获取所有超过某些值的对象。
你需要一个单独的Map<Status, List<SampleObject>>
(或者,如果你可以使用第三方库,一个番石榴Multimap
)来跟踪具有某种特定状态的对象,但我认为是第二个数据如果你不愿意为线性搜索买单,结构是不可避免的。
答案 1 :(得分:1)
NavigableSet和NavigableMap类提供了完成此操作的方法。
NavigableSet
已经提供了headSet
和tailSet
等方法来获取其他给定元素之前或之后的所有元素。您可以将日期条件用作Comparator
,如果尚未将其作为SampleObject
课程的自然顺序。
除了其他有用的方法,例如lower
,floor
,ceiling
和higher
。
同样NavigableMap
提供类似headMap和tailMap的方法来完成相同类型的切片。
答案 2 :(得分:0)
获取刷新日期早于某个值的对象的子列表,并且还能够快速获取具有特定状态的对象
听起来像 k - 维范围或搜索问题。您的选择包括:
如果你主要仅在一个维度上返回数据,你可以通过排序结构逃脱线性访问。