繁体   English   中英

具有多个可变查找属性的正确数据结构以进行收集

[英]Correct Data Structure for Collection with Multiple Mutable Look-Up Properties

如果我在内存中有5,000个或更多SampleObject类型的SampleObject

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

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

TreeMap<Date, SampleObject>可以很容易地获得“早于”某个日期的工作-您只需使用headMap即可使所有对象早于某个值。

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

NavigableSetNavigableMap类提供了实现此目的的方法。

NavigableSet已经提供诸如headSettailSet类的方法来获取另一个给定元素之前或之后的所有元素。 如果尚未将其日期条件用作SampleObject类的自然顺序,则可以将其用作Comparator

除了其他有用的方法,如lower floorfloorceilinghigher

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

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

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

如果您大多只返回一个维度的数据,则可以通过排序结构摆脱线性访问。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM