Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 具有多个可变查找属性的集合的正确数据结构_Java_Algorithm_Oop_Data Structures - Fatal编程技术网

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

Java 具有多个可变查找属性的集合的正确数据结构,java,algorithm,oop,data-structures,Java,Algorithm,Oop,Data Structures,如果我的内存中有5000个或更多类型的对象SampleObject class SampleObject { ... Date getLastRefreshDate() Status getCurrentStatus() } 我想快速获取刷新日期早于某个值的对象子列表,并且能够快速获取具有特定状态的对象,什么样的数据结构/算法会有用?迭代列表并进行比较是否足够快?如果名单增加到25000或更多怎么办 一个TreeMap可以很容易地完成“超过”某个日期的工作——您只需使用headMa

如果我的内存中有5000个或更多类型的对象
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维范围或搜索问题。你的选择包括:

如果只返回一维数据,则可以通过排序结构进行线性访问