具有多个可变查找属性的集合的正确数据结构

时间:2012-05-08 14:39:21

标签: java algorithm oop data-structures

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

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

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

3 个答案:

答案 0 :(得分:2)

TreeMap<Date, SampleObject>可以轻松完成某个日期“早于”某个日期的工作 - 您只需使用headMap来获取所有超过某些值的对象。

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

答案 1 :(得分:1)

NavigableSetNavigableMap类提供了完成此操作的方法。

NavigableSet已经提供了headSettailSet等方法来获取其他给定元素之前或之后的所有元素。您可以将日期条件用作Comparator,如果尚未将其作为SampleObject课程的自然顺序。

除了其他有用的方法,例如lowerfloorceilinghigher

同样NavigableMap提供类似headMap和tailMap的方法来完成相同类型的切片。

答案 2 :(得分:0)

  

获取刷新日期早于某个值的对象的子列表,并且还能够快速获取具有特定状态的对象

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

如果你主要仅在一个维度上返回数据,你可以通过排序结构逃脱线性访问。