簡體   English   中英

Java特定的數據結構

[英]Java - specific data structure

我需要執行以下操作:

(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);
         }

    }


}

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

HashSet對於add(E e)具有O(1)性能並且contains(E e) 要從HashSet<Integer>獲取任何舊元素(並將其刪除),您可以編寫

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

當你執行i.next()你可能需要搜索空的哈希桶。

如果使用LinkedHashSet而不是HashSet ,則會獲得類似add()contains() ,但i.next()更快,因為LinkedHashSet保留對第一個元素的引用。 通常,迭代LinkedHashSet要比HashSet快得多,因為你只需要遵循一系列引用。 但請注意, LinkedHashSet將使用比HashSet更多的內存,但如果你感興趣的話, LinkedHashSet是一個很好的答案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM