java - 如何在java中显示链接列表中的项目

标签 java list

大家好,我想知道如何显示链接列表中的所有节点。这是我到目前为止的代码。 Manager 类应该操作该列表。 movieNode 类为电影创建新的列表节点。我知道我还必须使用其他东西,但我只是想为初学者显示列表的第一个元素。

public class Manager {
    MovieNode head;

    public Manager (){
        head=null;
    }

    public void Add (MovieNode data) {
        if (head==null){
            head=data;
        }
    }
    public void Display () {
        int i=1;
        MovieNode temp=head;
        System.out.println("Displaying Movies");
        while (head!=null) {
            System.out.println(temp.getData().getName());
            head=null;
        }
    }
    }

还有 MovieNode 类的代码

public class MovieNode {
        private Movie data;
        private MovieNode next;

        public MovieNode (){
            data=null;
            next=null;
        }

        public MovieNode (Movie data){
            setData(data);

        }

        public void setData (Movie data){
            this.data=data;
        }
        public Movie getData (){
            return data;
        }
    }

最佳答案

希望这能帮助您入门。以下是一些提示:

经理类

  • 您不需要 Manager 的显式构造函数,因为您可以在线初始化 head 变量,并且不会将任何其他信息传递给构造函数
  • Java 中的方法名称通常采用驼峰命名法并以小写字母开头
  • 向链表添加新项时,可以仅传入数据并在add方法中创建节点
  • 假设您不需要维护任何特殊顺序,您可以将新项目插入列表的头部。这节省了遍历整个列表以查找尾部或保留对尾部的引用的时间。
  • 要显示所有电影,只需从head开始,检查列表中是否有节点next。如果您不需要实现此自定义方法,我建议将该类实现为 Iterable。关于此主题的 SO 讨论可以找到 here

MovieNode 类

  • 您只需要一个构造函数来获取数据并设置私有(private)变量
  • 您还需要 next 变量的 getter 和 setter,以便保存列表结构并迭代列表
  • toString() 实现将允许直接打印此类的实例,如 displayAllMovies() 方法

电影课

  • 此类目前仅保存电影的标题,但您可以根据您的规范对其进行扩展。

这是代码:

public class Manager {
    MovieNode head = null;

    public void addMovie(Movie data) {
        MovieNode newNode = new MovieNode(data);
        if (head == null) {
            head = newNode;
        } else {
            newNode.setNext(head);
            head = newNode;
        }
    }

    public void addMovieInOrder(Movie data) {
        MovieNode newNode = new MovieNode(data);
        if (head == null) {
            head = newNode;
        } else {
            MovieNode higher = head;
            MovieNode lower = null;

            // find the right position for newNode
            while(higher != null){
                if(newNode.compareTo(higher) > 0){
                    lower = higher;
                    higher = higher.getNext();
                }
                else break;
            }

            newNode.setNext(higher);
            if(higher == head) head = newNode;  //inserting as head
            else lower.setNext(newNode);
        }
    }

    public void displayAllMovies() {
        MovieNode node = head;

        if (node == null) {
            System.out.println("The list is empty!");
        }

        do {
            System.out.println(node.getData());
            node = node.getNext();
        } while (node != null);
    }

    public static void main(String[] args) {
        Manager manager = new Manager();
        manager.addMovieInOrder(new Movie("ddd"));
        manager.addMovieInOrder(new Movie("ccc"));
        manager.addMovieInOrder(new Movie("aaa"));
        manager.addMovieInOrder(new Movie("bbb"));
        manager.displayAllMovies();
    }
}

电影节点类:

public class MovieNode implements Comparable<MovieNode> {
    private Movie data;
    private MovieNode next = null;

    public MovieNode(Movie data) {
        this.data = data;
    }

    public void setData(Movie data) {
        this.data = data;
    }

    public Movie getData() {
        return data;
    }

    public void setNext(MovieNode node) {
        this.next = node;
    }

    public MovieNode getNext() {
        return next;
    }

    @Override
    public String toString() {
        return data.toString();
    }

    @Override
    public int compareTo(MovieNode otherMovieNode) {
        return data.compareTo(otherMovieNode.getData());
    }
}

电影类:

public class Movie implements Comparable<Movie> {
    private String title;

    public Movie(String title) {
        this.title = title;
    }

    @Override
    public String toString() {
        return title;
    }

    @Override
    public int compareTo(Movie otherMovie) {
        return title.compareTo(otherMovie.title);
    }
}

关于java - 如何在java中显示链接列表中的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9254086/

相关文章:

java - 如何将文件作为输入并在多线程中工作?

java - 由于 null/ map 生成器生成 null 导致游戏内更新循环错误

python - 从单词列表中查找字符出现百分比

python - 不使用 for 循环列出字典

java - 使用 FlowLayout 定位子面板

java - 如何正确使用JMH? ArrayList 示例

python - 如何仅给出长度递归地构建列表?

java - 检查列表是否包含多个元素的便捷方法

java - Jython : cannot import name String [from java.util] [closed]

python - 引用 SQL 结果以构建 Python 列表的最佳实践?