0

如果我有 5,000 个或更多类型对象的内存集合SampleObject

class SampleObject {
  ...
  Date getLastRefreshDate()
  Status getCurrentStatus()
}

我想快速获取刷新日期早于某个值的对象的子列表,并且还能够快速获取具有特定状态的对象,什么数据结构/算法会有用?迭代列表并进行比较是否足够快?如果列表增长到 25,000 或更多怎么办?

4

3 回答 3

2

ATreeMap<Date, SampleObject>可以很容易地完成“比”某个日期“更早”的工作——你只需使用它headMap来获取所有对象都比某个值更早。

你需要一个单独的Map<Status, List<SampleObject>>(或者,如果你可以使用第三方库,一个 Guava Multimap)来跟踪具有某些特定状态的对象,但我认为如果你不愿意支付第二个数据结构是不可避免的线性搜索。

于 2012-05-08T14:41:20.060 回答
1

NavigableSetNavigableMap类提供了执行此操作的方法。

NavigableSet已经提供了类似headSetand的方法tailSet来获取其他给定元素之前或之后的所有元素。您可以将日期标准用作Comparator您班级的自然顺序(如果尚未提供)SampleObject

除了其他有用的方法,如lower, floor,ceilinghigher.

同样NavigableMap提供类似的方法,如 headMap 和 tailMap 来执行完全相同的切片。

于 2012-05-08T14:45:04.257 回答
0

获取刷新日期早于某个值的对象的子列表,也能够快速获取具有某种状态的对象

听起来像是一个k维范围或搜索问题。您的选择包括:

如果您主要只返回一维数据,您可能能够通过排序结构摆脱线性访问。

于 2012-05-08T17:08:47.543 回答