[英]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.