用于优化get和迭代的Java数据结构

用于优化get和迭代的Java数据结构,java,data-structures,treeset,Java,Data Structures,Treeset,我需要一个数据结构来在logn时间中执行get/find,并从get操作返回的对象开始迭代。迭代器应该按照元素插入数据结构的相同顺序进行迭代 我可以使用TreeSet实现这一点吗?或任何其他数据结构 谢谢 如果您使用的是Java 6,您可以查看和。如果您从SortedMap开始,并使用键跟踪插入顺序,您将能够根据需要使用快速tailMap操作 如果需要通过关键点(或对象本身)查找对象的位置,请引入另一个将从关键点映射到对象位置的WeakHashMap。然后,您将使用检索到的序列号作为前一个映射的

我需要一个数据结构来在logn时间中执行get/find,并从get操作返回的对象开始迭代。迭代器应该按照元素插入数据结构的相同顺序进行迭代

我可以使用TreeSet实现这一点吗?或任何其他数据结构


谢谢

如果您使用的是Java 6,您可以查看和。

如果您从
SortedMap
开始,并使用键跟踪插入顺序,您将能够根据需要使用快速
tailMap
操作


如果需要通过关键点(或对象本身)查找对象的位置,请引入另一个将从关键点映射到对象位置的
WeakHashMap
。然后,您将使用检索到的序列号作为前一个映射的键。

此答案假设您希望按值获取/查找项目,而不是按插入序列号进行访问。我假设这个值与插入项目的顺序完全无关


<> P>标准java基础类最接近的是这允许按插入顺序快速搜索和迭代。但是它并没有给您一个从给定位置开始的迭代器,所以您必须自己实现它。基于
LinkedHashSet
,或者使用您自己的集合实现。我想最简单的方法是使用
哈希集
并自己实现链接。这样,您可以使用set方法查找起始元素,并使用该元素在链接之后构造迭代器。您可以将链接隐藏在包装器对象中,这样就不必在API中公开它们。

get/find基于什么标准?这看起来像是一个数组和二进制搜索的例子。如果你有这些东西的钥匙,可以帮你省下一天的时间。是的,我很抱歉错过了!以插入序列号为键,以实际对象为值的映射不会提供对数时间get/find作为OP所需的值。@MvG证明您错了。好的,这取决于您想通过什么查找内容,但我假设OP是通过值而不是序列号查找的。至少明确警告线性复杂性。如果您对按值查找的复杂性有不同的信息,请提供一个链接。@MvG我看您是对的。昨天当我回答这个问题时,我确信请求是以序列号开始的。@MvG我又加了一句话,我认为这是个好主意。