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

时间:2012-07-09 14:19:01

标签: java data-structures treeset

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

我可以使用TreeSet实现此目的吗?或任何其他数据结构?

谢谢!

3 个答案:

答案 0 :(得分:1)

如果您从SortedMap<Integer, Object>开始并使用键来跟踪广告订单的顺序,则可以根据需要使用快速tailMap操作。

如果您需要通过键(或者可能是对象本身)找到对象的位置,则引入另一个WeakHashMap<Object, Integer>,它将从您的键映射到对象的位置。然后,您将使用检索到的序列号作为前一个地图的密钥。

答案 1 :(得分:1)

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

标准Java基础类最接近的是LinkedHashSet。这允许在插入顺序中快速搜索和迭代。但它不会给你一个从给定位置开始的迭代器,所以你必须自己实现它。基于LinkedHashSet或使用您自己的集合实现。我想最简单的方法是使用HashSet并自己实现链接。这样,您可以使用set方法查找起始元素,并使用它来构建链接后的迭代器。您可以隐藏包装器对象中的链接,因此您不必在API中公开它们。

答案 2 :(得分:0)

如果您使用的是Java 6,则可以查看ConcurrentSkipListSetConcurrentSkipListMap