Java - 有效获取间隔的集合

时间:2015-02-24 18:11:00

标签: java data-structures collections

我想将许多具有public int getTime()方法的对象放入数据结构中,我可以快速获得包含给定间隔之间所有对象的可迭代集合。

例如,我有以下对象及其时间戳:

Obj0   00225
Obj1   00236
Obj2   00248
Obj3   00248
Obj4   00253
Obj5   00256

是否有一个集合,我可以有效地将这些对象放入其中,并迅速获得一个间隔作为子集合?例如:data.subcollection(00230,00250)会在可迭代集合中为我Obj1Obj2Obj3提供。

请注意,可以有两个具有相同时间戳的不同对象。

编辑:了解操作add()subcollection()的复杂程度会很高兴。

2 个答案:

答案 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());