我需要一个数据结构来在Log N时间内进行get / find,并从get操作返回的对象开始迭代。迭代器应按照将元素插入数据结构的相同顺序进行迭代。
我可以使用TreeSet实现此目的吗?或任何其他数据结构?
谢谢!
答案 0 :(得分:1)
如果您从SortedMap<Integer, Object>
开始并使用键来跟踪广告订单的顺序,则可以根据需要使用快速tailMap
操作。
如果您需要通过键(或者可能是对象本身)找到对象的位置,则引入另一个WeakHashMap<Object, Integer>
,它将从您的键映射到对象的位置。然后,您将使用检索到的序列号作为前一个地图的密钥。
答案 1 :(得分:1)
此答案假定您希望按值获取/查找项目,而不是插入序列号访问。我假设这个值与插入项目的顺序完全无关。
标准Java基础类最接近的是LinkedHashSet。这允许在插入顺序中快速搜索和迭代。但它不会给你一个从给定位置开始的迭代器,所以你必须自己实现它。基于LinkedHashSet
或使用您自己的集合实现。我想最简单的方法是使用HashSet
并自己实现链接。这样,您可以使用set方法查找起始元素,并使用它来构建链接后的迭代器。您可以隐藏包装器对象中的链接,因此您不必在API中公开它们。
答案 2 :(得分:0)
如果您使用的是Java 6,则可以查看ConcurrentSkipListSet和ConcurrentSkipListMap。