Java 搜索LinkedHashMap,比sequential更快的方法?

Java 搜索LinkedHashMap,比sequential更快的方法?,java,iterator,treemap,linkedhashmap,Java,Iterator,Treemap,Linkedhashmap,我想知道是否有一种更有效的方法可以将时间戳大于指定时间的对象从LinkedHashMap中取出。即,比以下更好的东西: Iterator<Foo> it = foo_map.values().iterator(); Foo foo; while(it.hasNext()){ foo = it.next(); if(foo.get_timestamp() < minStamp) continue; br

我想知道是否有一种更有效的方法可以将时间戳大于指定时间的对象从LinkedHashMap中取出。即,比以下更好的东西:

    Iterator<Foo>  it = foo_map.values().iterator();
    Foo foo;

    while(it.hasNext()){
        foo = it.next();
        if(foo.get_timestamp() < minStamp) continue;

        break;
    }
Iterator it=foo_map.values().Iterator();
富富,;
while(it.hasNext()){
foo=it.next();
如果(foo.get_timestamp()
在我的实现中,我的每个对象基本上都有三个值:“id”、“timestamp”和“data”。对象是按时间戳的顺序插入的,因此当我调用集合上的迭代器时,我会得到有序的结果(按照链接hashmap契约的要求)。地图被设置为对象id的关键帧,因此我可以通过id快速查找它们

然而,当我通过时间戳条件查找它们时,我会得到一个带有排序结果的迭代器。这是对一般hashmap的改进,但是我仍然需要在大部分范围内按顺序迭代,直到找到下一个时间戳高于指定时间戳的条目


由于结果已经排序,是否有任何算法可以将迭代器(或集合)传递给它,从而比顺序搜索更快?如果我选择树形图作为替代,它会提供整体速度优势,还是在后台做基本相同的事情?因为集合已经按插入顺序排序了,所以我认为树映射的开销要大得多,这是我不需要的?

没有更快的方法。。。如果您只是使用
LinkedHashMap

如果您想要更快的访问,则需要使用不同的数据结构。例如,对于问题的这一方面,使用带有适当比较器的
TreeSet
可能是更好的解决方案。例如,如果树集按日期排序,则使用适当的伪值调用
tailSet
,可以为您提供大于或等于给定日期的所有元素


由于结果已经排序,是否有任何算法可以将迭代器(或集合)传递给它,从而比顺序搜索更快

不适用于
LinkedHashMap

但是,如果有序列表是一个
ArrayList
,那么您可以在列表上使用“二进制搜索”。。。前提是您可以在搜索时锁定它以防止并发修改。(实际上,并发是一个潜在的问题,不管你如何实现这一点……包括当前的线性搜索)。

如果您想保持查找
id
的能力,那么您需要两个数据结构;e、 g.共享元素对象的
TreeSet
HashMap
。假设存在随机插入和/或随机删除,
TreeSet
可能比尝试维护
ArrayList
更有效。

数据被锁定,因此并发性不是问题。是的,二进制搜索将是一个巨大的改进,但我不能放弃id映射。我认为两种数据结构可以做到这一点。一个常规的旧hashmap和arraylist,其中包含仅包含id和时间戳的对象。删除对象会有点棘手,因为它需要搜索arraylist来删除相应的时间戳。但我认为时间戳搜索会快得多。