2015-02-24 87 views
1

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

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

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

是否有一个集合,我可以井井有条地在这些对象中,并迅速得到间隔为子集合?例如:data.subcollection(00230,00250)会给我Obj1,Obj2Obj3在一个可迭代的集合。

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

编辑:很高兴知道操作add()subcollection()具有哪些复杂性。

回答

1

TreeMap可能可以为你做这个,TreeMap<Integer, ThingWithTime>。要获取子范围,请查询map.subMap(230, 250).values()以获取密钥范围为230(含)至250(含)的ThingWithTime对象。像往常一样,你应该期望O(log n)的复杂性。

+0

但是,当我有两个不同的对象一个键(在我的例子''obj2'and obj3')我不会让他们无论是在子图? – R13N 2015-02-24 18:20:30

+0

如果你有这种情况,你可能需要做一个'TreeMap >'并迭代列表集合。 – 2015-02-24 18:33:35

+0

这实际上是一个很好的解决方案!谢谢。 – R13N 2015-02-24 18:43:46

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()); 
+0

我正在使用Java 7,并且此代码高于我的级别,但我会研究它,谢谢! – R13N 2015-02-24 19:00:01