【问题标题】:How to create a LinkedList of objects from scratch(not using java's API)如何从头开始创建对象的 LinkedList(不使用 java 的 API)
【发布时间】:2020-02-11 08:49:36
【问题描述】:

我必须从头开始创建一个对象的 LinkedList,我根本无法理解它,我不确定我是否需要一个用于linkedlist 和节点的类,或者我是否可以在对象中做到这一点类本身。我也在使用场景构建器在 JavaFx 上执行此操作,因此我需要通过控制器类的用户输入添加对象。

我尝试将节点和链表分离到它们自己的类中,但这让我更加困惑。

这是我当前的 Show 对象字段和构造函数

public class Show {

        private String title;
        private int runningTime;
        private String startDate, endDate;
        private int ticketPrice;
        public Node head, next;



        public Show (String title, int runningTime, String startDate, String 
                     endDate, int ticketPrice) {
            this.title = title;
            this.runningTime = runningTime;
            this.startDate = startDate;
            this.endDate = endDate;
            this.ticketPrice = ticketPrice;
            next=null;
        }

当我尝试调用我在 Show 类中公开的头部时,它会给出错误“无法从静态上下文引用非静态字段 'head'”

我正在寻找对象特定链表的正确结构。

【问题讨论】:

  • 你不能在主静态函数中使用'head',你可以在同一个项目的另一个文件中创建主函数并在那里创建 Show 对象,你可以将 Show 中的所有内容设为静态。 注意:在java中你可能想要使用setter和getter方法
  • 如果您将元素与链表实现混合使用,则结果将无法重用。尝试使用Object(或通过泛型指定的类型)作为每个节点的内容类型。不过,最好对用户完全隐藏节点。 java.util.LinkedList 执行此操作(O(1) 插入/删除可通过 ListIterator 获得)。
  • @JoshW。我应该指出,我也有 setter 和 getter 方法,虽然没有额外的代码,但我只是生成了它们,让它们提供更简单的解决方案吗?
  • @Steven Guiry 我想说的是,如果你在静态方法中使用“head”,例如在Show 类中的public static void main(...){...} 方法中,您会得到该错误代码

标签: java javafx linked-list singly-linked-list


【解决方案1】:

将以下方法添加到您的“显示”类将起作用。您不能在此处直接引用“head”,因为 main 不在 Show 对象的上下文中执行,因此无法访问任何类成员变量。但是,它可以访问这些由 Show 类的实例限定的成员变量。请注意,我并不是主张您像这样公开您的实现细节,但这是另一个讨论。

public static void main(String args) {
  Show show = new Show(....);
  show.head = new Node(...);
}

【讨论】:

    猜你喜欢
    • 2011-05-03
    • 2010-09-13
    • 1970-01-01
    • 2020-10-12
    • 2011-10-10
    • 2014-06-26
    • 1970-01-01
    • 2021-12-05
    • 1970-01-01
    相关资源
    最近更新 更多