用于保存带时间戳的对象列表的数据结构

时间:2013-10-08 09:11:33

标签: java data-structures

我有一个带时间戳的对象列表,我需要执行的唯一查询是“查找timsetamp大于x的所有对象”。 哪种数据结构最适合优化上述查找?我没有更长的插入时间,但如果可能的话,我宁愿不使用完整的EPL实现。

4 个答案:

答案 0 :(得分:4)

如果您在某个应用程序中使用SQL数据库,则为时间戳字段创建一个索引,然后进行查询。

否则,如果您没有数据库,这看起来像是TreeMapConcurrentSkipList的作业。两者都实现subMap(K, K)中的headMap(K)tailMap(K)NavigableMap interface方法。您可以通过在密钥中实现Comparable接口或在创建集合时指定Comparator来为任何SortedMap(及其子接口)指定自定义顺序。如果您不需要键值映射,也可以使用NavigableSet及其实现TreeSetConcurrentSkipListSet

答案 1 :(得分:0)

您可以使用以下代码:

//declare an ArrayList of Objects
ArrayList<MyTimestampedObject> list = loadObjects();

//new list to store Objects after condition check
ArrayList<MyTimestampedObject> newList = new ArrayList<MyTimestampedObject>();

//loop through the list
for(MyTimestampedObject tmp:list ){

  //check condition
  if(tmp.getDate()>x){
    //do something
    newList.add(tmp);
  }

}

答案 2 :(得分:0)

您可以使用任何允许二进制搜索的排序数据结构(如果您不关心插入时间),并且对于给定的X,执行搜索(需要O(logN)次)要找到第一个带有timestamp > X的对象,因为数据结构是有序的,所以此对象之后的数据结构中的所有对象也都有timestamp > X

请注意,如果您要返回此查询中的对象列表,则无法完成O(N) - 您将复制或删除O(N) times,因为在一般情况下,此查询中可以检索的对象数为O(N)

答案 3 :(得分:0)

BST(二叉搜索树?InOrder如何使用O(logn)为您提供所需内容。