Java Ordered Hashable Collection

时间:2016-03-21 20:25:10

标签: java hashset

什么java数据结构是有序集合,提供HashSet的函数常量时间contains方法,并提供索引的常量时间查找,就像ArrayList的get方法一样? Java API是否包含这样的东西?我考虑过使用TreeSet,但根据Java Docs,这些操作是O(log n)。

2 个答案:

答案 0 :(得分:1)

Java标准库不提供这样的类,但您可以自己实现,而不会有太多麻烦。它或多或少是LinkedHashSet的对偶:List(可能包裹ArrayList)维持内部HashSet进行恒定时间contains()处理。

Collections API具有旨在使其易于实现的类 集合类;在这种情况下,我将考虑实现AbstractList的具体子类。

<强>更新 另一方面,如果您的想法是实例自动维护其元素的顺序,和/或它们不允许重复元素,那么您所谈论的内容根本不是List。在这种情况下,您可能需要考虑实现AbstractSet的具体子类,它添加了索引检索方法。您仍然可以包装HashSetArrayList,但您需要花费一些精力来保持列表元素插入顺序。

答案 1 :(得分:0)

使用LinkedHashSet。它是Set接口的Hash表和链表实现,具有可预测的迭代顺序。

对于插入或检查哈希集中项目是否存在,您将看到O(n)复杂度。但是大多数时候你都没有看到碰撞,所以在大多数情况下它会是 O(1)。