gpt4 book ai didi

java - 如何允许对象从 Java 中的 LinkedList 中删除自己?

转载 作者:行者123 更新时间:2023-12-04 06:03:57 25 4
gpt4 key购买 nike

主要问题:
我正在寻找某种方法来为 LinkedList 中的对象提供对列表中自身的引用,以便它可以(有效地)将自身从所述列表中删除(无需对列表进行排序以查找自身。我希望它直接将自己从列表中删除并将上一个和下一个项目联系在一起。)。

不必要的细节:
我已经进行了合理的谷歌搜索,除了建议不要使用循环引用的人之外,没有发现任何其他内容。

我想在设计游戏时这样做,并且在游戏中对象可以实现各种接口(interface),这些接口(interface)允许它们位于以优先方式循环的各种列表中。单个对象可能同时处于绘制循环、逐步遍历其动画帧的循环、高优先级逻辑循环和低优先级逻辑循环中。我想实现一个 removeFrom|TypeOfLoop|方法在每个适当的接口(interface)中,以便如果一个对象决定它不再需要在循环中,它可以直接删除自己。这使执行实际循环的对象非常简单。

或者,如果没有办法做到这一点,我正在考虑实现一个标记系统,在该系统中,列表会根据项目中的变量检查是否要删除每个项目。但是,我不喜欢这样做足以让我自己的 LinkedList 能够通过引用删除的想法。

最佳答案

我最近做了这个。我正在寻找一个 O(1) 添加 O(1) 删除无锁 Collection .最终我写了自己的 Ring因为我想要一个固定大小的容器,但你可能会发现我第一次尝试值(value)时使用的技术。

我面前没有代码,但如果没有记错的话:

复制 Doug Lea的优秀Concurrent Doubly LinkedList和:

  • 曝光Node类(class)。我使用了 interface但这取决于你。
  • 更改add , offer ... 返回 Node 的方法而不是 boolean .它现在不再是 java Collection ,但稍后请参阅我的评论。
  • 曝光delete Node 的方法类或添加 remove采用 Node 的方法.

  • 您现在可以在 O(1) 时间内从列表中删除元素,它是 无锁 .

    已添加

    这是 remove(Node) 的实现方法取自他的 Iterator执行。请注意,您必须不断尝试,直到成功。
    public void remove(Node<E> n) {
    while (!n.delete() && !n.isDeleted())
    ;
    }

    关于java - 如何允许对象从 Java 中的 LinkedList 中删除自己?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8588837/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com