Java 具有多个可变查找属性的集合的正确数据结构
如果我的内存中有5000个或更多类型的对象Java 具有多个可变查找属性的集合的正确数据结构,java,algorithm,oop,data-structures,Java,Algorithm,Oop,Data Structures,如果我的内存中有5000个或更多类型的对象SampleObject class SampleObject { ... Date getLastRefreshDate() Status getCurrentStatus() } 我想快速获取刷新日期早于某个值的对象子列表,并且能够快速获取具有特定状态的对象,什么样的数据结构/算法会有用?迭代列表并进行比较是否足够快?如果名单增加到25000或更多怎么办 一个TreeMap可以很容易地完成“超过”某个日期的工作——您只需使用headMa
SampleObject
class SampleObject {
...
Date getLastRefreshDate()
Status getCurrentStatus()
}
我想快速获取刷新日期早于某个值的对象子列表,并且能够快速获取具有特定状态的对象,什么样的数据结构/算法会有用?迭代列表并进行比较是否足够快?如果名单增加到25000或更多怎么办 一个TreeMap
可以很容易地完成“超过”某个日期的工作——您只需使用headMap
即可获得所有超过某个值的对象
不过,你需要一个单独的地图(或者,如果你可以使用第三方库,可以使用番石榴多地图)来跟踪具有特定状态的对象,但我认为,如果你不愿意为线性搜索付费,第二个数据结构是不可避免的。一个树地图可以完成“比”旧的任务一个特定的日期,非常容易——您只需使用headMap
来获取所有比某个值旧的对象
不过,您需要一个单独的映射
(或者,如果您可以使用第三方库,则需要一个Guava多映射
)来跟踪具有特定状态的对象,但我认为,如果您不愿意为线性搜索付费,第二种数据结构是不可避免的。和类提供了实现这一点的方法
NavigableSet
已经提供了类似于headSet
和tailSet
的方法来获取其他给定元素之前或之后的所有元素。如果尚未作为SampleObject
类的自然顺序提供,则可以将日期标准用作比较器
除了其他有用的方法,如降低
,地板
,天花板
,以及升高
同样地,NavigableMap
提供了类似的方法,如headMap和tailMap,以完成完全相同的切片。和类提供了这样做的方法
NavigableSet
已经提供了类似于headSet
和tailSet
的方法来获取其他给定元素之前或之后的所有元素。如果尚未作为SampleObject
类的自然顺序提供,则可以将日期标准用作比较器
除了其他有用的方法,如降低
,地板
,天花板
,以及升高
同样地,NavigableMap
提供了类似的方法,如headMap和tailMap,以完成完全相同的切片
获取刷新日期早于某个值的对象子列表,并且能够快速获取具有特定状态的对象
听起来像是k维范围或搜索问题。你的选择包括:
如果只返回一维数据,则可以通过排序结构进行线性访问
获取刷新日期早于某个值的对象子列表,并且能够快速获取具有特定状态的对象
听起来像是k维范围或搜索问题。你的选择包括:
如果只返回一维数据,则可以通过排序结构进行线性访问