Java特定的数据结构

时间:2015-03-07 16:43:55

标签: java

我需要执行以下操作:

(1)检查O(1)

中是否存在元素

(2)加入O(1)

(3)删除并返回O(1)

我在java中考虑过Set,但它只支持(1)和(2)。我知道可以做这样的事情set.iterator().next()set.iterator().remove()但是这个解决方案的复杂性是什么?

编辑

我想要这样的事情:

Set<Integer> remaining = new HashSet<>();

// add values

Queue<Integer> queue = new ArrayDeque<>();

while(!remaining.isEmpty()) {
    int val = remaining.iterator().next();   // !!!
    remaining.iterator().remove();          // !!!
    queue.add(val);

    while(!queue.isEmpty()) {

         List<Integer> valuesToBeRemoved = getValues();
         // some logic
         for(int value : valuesToBeRemoved) {
              remaining.remove(value);
         }

    }


}

我想知道是否标有// !!!是最佳的

1 个答案:

答案 0 :(得分:0)

HashSetadd(E e)contains(E e)的效果为O(1)。要从HashSet<Integer>中获取任何旧元素(并将其删除),您可以编写

Iterator<Integer> i = set.iterator();
int a = i.next();
i.remove();

执行i.next()时,您可能需要搜索空哈希桶。

如果您使用的是LinkedHashSet而不是HashSet,则add()contains()的效果会相似,但i.next()会更快,因为LinkedHashSet 1}}保留对第一个元素的引用。通常,迭代LinkedHashSetHashSet快得多,因为您只需要遵循一系列引用。但请注意,LinkedHashSet将使用比HashSet更多的内存,但如果您感兴趣的话,LinkedHashSet是一个很好的答案。