【问题标题】:Exposing the node class and retain a reference to it in another class暴露节点类并在另一个类中保留对它的引用
【发布时间】:2020-09-24 13:49:44
【问题描述】:

我正在寻找让我的矿车对象充当节点的方法,以便它们可以将自己从列表中删除,但我担心当前的代码设计会导致麻烦。

我认为这是因为不同的类型:<T extends MineCart> vs <MineCart>

我不是在寻找如何编写 remove 方法的答案,而是寻找解决方案,以便 MineCart 对象可以像节点一样工作。 我很乐意就如何解决这个问题获得一些建议。

链表(只显示相关部分)

public class MyCustomLinkedList<T extends MineCart> implements Iterable<T> {

    //... your typical list methods (e.g. add/remove etc)

    public static class Node<T> {
        private T item;
        private Node<T> prev, next;

        public Node(T item, Node<T> prev, Node<T> next) {
            this.item = item;
            this.prev = prev;
            this.next = next;
        }
    }
}

MineCart 类(仅显示相关部分)

public abstract class MineCart implements Comparable<MineCart> {
    public MineCart nextCart; 
    public MineCart prevCart;

    public MineCart getNextMineCart() {
       // and then do something like this:
       // return this.next;
       // or return nextCart;
    }
}

【问题讨论】:

  • 你的问题是什么? Wagon 和 MineCart 是什么关系?
  • @Conffusion srry 这是一个错字,我已修正。我的实际问题是(简单版)我有一个 MineCart 对象--> 现在让它像节点一样工作
  • 为什么你需要一个 Node 类,因为 MineCart 拥有所有信息(上一个,下一个)?
  • 在 MineCart 类中调用 this.next 不起作用,nextCart 也为空;

标签: java nodes doubly-linked-list


【解决方案1】:

让 MineCart 从列表中删除自己:

public abstract class MineCart implements Comparable<MineCart> {
    public void remove() {
       prevCart.nextCart=nextCart;
    }
}

之前:

[cart1] - [cart2] - [cart3]

cart2.remove()

之后:

[cart1] - [cart3]  
[cart2] 

由于 MineCart 知道它的邻居,因此您不需要 Node 类。

【讨论】:

  • 我的错,我不是在寻找关于如何编写删除方法的解决方案。我更新了问题以使其更加清晰。
猜你喜欢
  • 2015-08-08
  • 1970-01-01
  • 1970-01-01
  • 2018-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多