我想将许多具有public int getTime()
方法的对象放入数据结构中,我可以快速获得包含给定间隔之间所有对象的可迭代集合。
例如,我有以下对象及其时间戳:
Obj0 00225
Obj1 00236
Obj2 00248
Obj3 00248
Obj4 00253
Obj5 00256
是否有一个集合,我可以有效地将这些对象放入其中,并迅速获得一个间隔作为子集合?例如:data.subcollection(00230,00250)
会在可迭代集合中为我Obj1
,Obj2
和Obj3
提供。
请注意,可以有两个具有相同时间戳的不同对象。
编辑:了解操作add()
和subcollection()
的复杂程度会很高兴。
答案 0 :(得分:1)
TreeMap
可能会为您执行此操作,TreeMap<Integer, ThingWithTime>
。要获取子范围,请查询map.subMap(230, 250).values()
以获取ThingWithTime
个对象,其中包含230到250的独占键。像往常一样,您应该期望O(log n)的复杂性。
答案 1 :(得分:1)
如果您使用Java 8,我建议您将它们放在一个简单的List
中,然后使用Parallel Streams进行基于日期的过滤。
这些方面的东西:
List<Obj> filteredList = objects // Some form of List with all your objects
.parallelStream()
.filter(o -> o.timestamp <= high && o.timestamp => low)
.collect(Collectors.toList());