繁体   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