【问题标题】:java creating double linked listsjava创建双链表
【发布时间】:2017-03-21 11:47:31
【问题描述】:

我正在寻找一种实现具有双链表节点功能的类的方法。我不想重新发明轮子,但我在标准 java 库中看不到任何合适的东西,而且我在这个网站上找不到答案。

我需要的是一个对象数组,其中每个对象都知道它的邻居:就像标准 java.util.LinkedList 中的私有类 Note。

这里有几点说明:

1)我不能使用java.util.LinkedList,因为存储的对象没有指向邻居的链接。

2)我不能使用java.util.LinkedList ListIterator - 首先,我不想遍历所有列表来查找对象,我不想在任何地方保留对象索引 - 因为这会破坏程序的完整性。出于同样的原因,我不能将迭代器放在任何地方。

我需要的是具有插入/删除能力的对象列表, 而且当我传递对象时,我需要能够让代码访问对象邻居(上一个/下一个)。

我假设 Java 库没有这个?如果我要自己实现它,它会变得更糟。

3) 我无法创建将由我自己的类扩展以列出的基本 Node 类。我的派生类不是节点,这将打破 java 的继承范式。

4)我无法创建 Node 接口,因为它不能有可变成员(“prev”和“next”)

【问题讨论】:

  • ")我无法创建基本 Node 类" - 为什么?您的问题令人困惑,您可能需要重新措辞或以其他方式澄清它。
  • 信息太多。不清楚你真正的问题是什么。
  • domdom,Java 范式是“扩展”某些“节点”类,只有当类是“节点”时才允许。我现有的课程不是节点。使其成为节点将防止从其他基类派生它。并使代码更难支持。
  • tak3shi - 真正的问题是:标准 Java 库是否有“双向链表”? en.wikipedia.org/wiki/Doubly_linked_list,注意java.util.LinkedList - 不是真正的链表,因为Node接口没有暴露

标签: java linked-list


【解决方案1】:

如果您希望您的类能够看到“彼此相邻”的节点,您可以随时为您的类提供它自己的变量 prev 和 next 并定义插入方法。

public class MyClass {
    public MyClass prev;
    public MyClass next;
    // Using string as an example for data
    String data;

    public void insert(MyClass myclass, String insert_after) {
        // will depend if you want it sorted or not
    }

    public void delete(String delete) {
        // itterate through recursively to find the node with
        // next.data equal to remove then replace next with next.next
    }
}

请注意这是在移动设备上输入的(@ 5am),请随时评论错误。

【讨论】:

  • 当然可以添加“上一个”和“下一个”。唯一的问题是这不是一个通用的解决方案。这就是所谓的重新发明轮子。我需要用所有方法实现我自己的列表,这当然容易出错,并且我需要将此代码剪切并粘贴到需要相同功能的不同类中
  • 那么你不能只创建一个实现所有功能的 Node 类,然后使用泛型来允许它可重用,因为这些方法实现起来并不复杂。我知道这可能不是一个即时的解决方案,但比到处寻找预制的东西要好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-29
  • 1970-01-01
  • 2016-07-18
相关资源
最近更新 更多