2013-08-03 52 views
2

我在Java中使用Sets/Iterators時遇到問題。我正在執行迭代散列集中元素的代碼,在它們被使用之後將其刪除,但也刪除了在循環內迭代時被認爲不必要的元素。我還在循環中添加元素。這裏是一個代碼示例:迭代時修改一組(Java)

Set<Integer> thisSet = new HashSet<Integer>(); 
// add elements into set 
while (!thisSet.isEmpty()) { 
    int value = thisSet.iterator().next(); 
    thisSet.remove(value); 
    // more remove and add operations 
} 

我選擇了哈希集,因爲我認爲在循環中的刪除操作會比使用列表快得多。問題是統計數據表明,如果集合變大,從集合中輪詢一個值實際上會花費很多時間(我假設每次都創建一個迭代器?)。有沒有人有如何改善這個建議?

謝謝!

+3

不是答案,但不應該由迭代器刪除該項目? –

+0

我同意@HovercraftFullOfEels。爲什麼不使用迭代器來刪除元素? –

+2

爲什麼要刪除它們?您可以在循環後清除或放棄該組。 –

回答

0

沒有足夠的知名度給氣墊船充滿鰻魚評論,但他絕對正確。不使用迭代器從集合中刪除項目最終會導致ConcurrentModificationException。 +1

如果我們從數據結構的角度來看待這個問題,您需要一個由鏈接列表備份的數據結構,以便更快地進行插入/刪除操作。有關插入/刪除O()邊界,請參閱鏈接列表與動態數組@https://en.wikipedia.org/wiki/Linked_list

最終,我的建議是通過LinkedHashSet對象來備份您的Set,並使用Profiler來檢查您要使用的示例輸入的執行時間。