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

时间:2012-02-13 00:21:08

标签: 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;
        }
    }

1 个答案:

答案 0 :(得分:1)

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

经理类

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

MovieNode类

  • 您只需要一个带data的构造函数并设置私有变量
  • 您还需要next变量的getter和setter才能保存列表结构并遍历列表
  • toString()实现将允许直接打印此类的实例,如displayAllMovies()方法

电影课

  • 此课程暂时只保存电影的title,但您可以根据您的规格进行扩展。

以下是代码:

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);
    }
}