簡體   English   中英

Java LinkedList 保持對節點的引用並添加

[英]Java LinkedList keep reference to nodes and add

我正在使用 Java 中的LinkedList ,其中我使用一個線程向列表中添加和刪除項目。 我只在頭部添加元素,因為我使用列表作為隊列。 我可能會添加一個元素,使用節點刪除它,然后添加另一個元素等。因為它是雙鏈接的,所以顯然是有可能的。

我應該能夠保留對節點的引用,這是通過 Java 中的迭代器完成的,但是當我創建一個迭代器然后向鏈表添加一些東西,然后通過我之前創建的迭代器刪除元素時,它會拋出一個ConcurrentModificationException

我一直在搜索文檔,但找不到任何東西。

我確實理解為什么會出現異常(它在文檔中說明...),但是如何使用LinkedList實現這一點? 這顯然是可能的。

編輯:評論的人可能不明白雙鏈表是如何工作的,所以讓我很快給你介紹一下。

雙鏈表引用了它的上一個和下一個元素,因此您只能刪除它引用 O(1) 中的節點。

下一步,我要澄清我想要的行為:

  1. 向列表中添加一個元素。
  2. 保存對該節點的引用r
  3. 添加另一個元素。
  4. 刪除舊引用r

編輯#2 :我可以補充一點,C++ 可以毫無問題地做到這一點( http://www.cplusplus.com/reference/list/list/ )。

謝謝,

約翰

我認為這是不可能的,您應該使用 ConcurrentLinkedDeque。

JVM 經過充分優化,不會對性能造成太大影響,它只是宣傳:

迭代器是弱一致的,返回反映雙端隊列在迭代器創建時或創建后的某個時間點的狀態的元素。 它們不會拋出 ConcurrentModificationException,並且可以與其他操作同時進行。

https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ConcurrentLinkedDeque.html

暫無
暫無

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

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