Java LinkedList保持对节点的引用并添加

时间:2015-11-17 21:57:28

标签: java

我正在使用Java中的LinkedList,我使用一个线程在列表中添加和删除项目。我只在头部添加元素,因为我使用列表作为队列。我可以添加一个元素,使用节点删除它,然后添加另一个元素等。因为它是双链接的,所以显然是一种可能性。

我应该能够保留对节点的引用,这是通过Java中的迭代器完成的,但是当我创建一个迭代器然后将某些内容添加到链表中,然后通过我之前创建的迭代器删除该元素时,它抛出一个ConcurrentModificationException

我一直在搜索docs但无法找到任何内容。

我明白为什么我会得到例外(它在文档中说明了......),但是我如何使用LinkedList实现这一点?这显然是可能的。

修改: 人们评论可能无法理解双链表是如何工作的,所以让我稍后告诉你。

双链表引用了它的上一个和下一个元素,因此你可以删除它只引用O(1)中的节点。

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

  1. 在列表中添加元素。
  2. 引用 r保存到该节点。
  3. 添加其他元素。
  4. 删除旧参考r
  5. 编辑#2 : 我可以补充一点,C ++可以毫无问题地执行此操作(http://www.cplusplus.com/reference/list/list/)。

    谢谢,

    约翰

1 个答案:

答案 0 :(得分:1)

我认为这是不可能的,你应该使用ConcurrentLinkedDeque。

JVM经过充分优化,不会受到很大的性能影响,它只是宣传:

迭代器是弱一致的,在迭代器创建时或之后的某个时刻返回反映双端队列状态的元素。它们不会抛出ConcurrentModificationException,并且可能与其他操作同时进行。

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