Java - 高效获取区间的集合

Java - Collection to efficiently get interval

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

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

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

有没有一个集合可以高效的放入这些对象,并快速得到一个区间作为子集合?例如:data.subcollection(00230,00250) 会在可迭代集合中给我 Obj1Obj2Obj3

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

编辑:很高兴知道操作 add()subcollection() 的复杂性。

TreeMap 可能会用 TreeMap<Integer, ThingWithTime> 为你做这件事。要获取子范围,请查询 map.subMap(230, 250).values() 以获取键在 230(含)到 250(不含)范围内的 ThingWithTime 个对象。像往常一样,您应该期望 O(log n) 复杂性。

如果您使用 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());