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)
会在可迭代集合中给我 Obj1
、Obj2
和 Obj3
。
请注意,可以有两个不同的对象具有相同的时间戳。
编辑:很高兴知道操作 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());
我想将许多具有 public int getTime()
方法的对象放入一个数据结构中,这样我可以快速获得一个包含给定时间间隔内所有对象的可迭代集合。
例如,我有以下对象及其时间戳:
Obj0 00225
Obj1 00236
Obj2 00248
Obj3 00248
Obj4 00253
Obj5 00256
有没有一个集合可以高效的放入这些对象,并快速得到一个区间作为子集合?例如:data.subcollection(00230,00250)
会在可迭代集合中给我 Obj1
、Obj2
和 Obj3
。
请注意,可以有两个不同的对象具有相同的时间戳。
编辑:很高兴知道操作 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());