0

我在 java 中创建了一个通用链表(不是内置链表),并有一个 LinkedList 类、ListInterface 类、Node 类、一个 Dvd 类和一个 DvdManager 类。我的目标是能够将 DVD 添加到链接列表中并按字母顺序打印出来。我已经成功地编写了代码来添加、删除和添加 DVD 的副本到链接列表。但是,我无法弄清楚如何按字母顺序打印列表。我可以使用以下代码打印列表,但它不会根据项目的标题按字母顺序打印:

if (movies.isEmpty()) {
  System.out.println("The list is empty.");
} else {
  for (int i = 1; i <= movies.length(); i++) {
    System.out.println(movies.get(i).getTitle());                                                 
  }
}

如何让通用类型列表按字母顺序打印?如果你想看一下,这是我的类文件(我把它们放在 pastebin 上,因为它们很长):DvdManagerDvdLinkedListListInterfaceNode。谢谢。

编辑:我使用插入排序解决了这个问题:

public void add(Dvd item) {
  DvdNode addThis = new DvdNode(item);
  if(head == null) {
    head = addThis;
  } else if(item.getTitle().compareToIgnoreCase(head.getItem().getTitle()) < 0) {
      addThis.setNext(head);
      head = addThis;
    } else {
        DvdNode temp;
        DvdNode prev;
        temp = head.getNext();
        prev = head;
        while(prev.getNext() != null && item.getTitle().compareToIgnoreCase
            (prev.getNext().getItem().getTitle()) > 0) {
          prev = temp;
          temp = temp.getNext();
        }
        addThis.setNext(temp);
        prev.setNext(addThis);
      }
}
4

1 回答 1

3

至少有两种方式:

  1. 按排序顺序维护您的链接列表,这样您上面列出的打印代码就可以正常工作。这将使插入花费 O(n)。

  2. 如果您不反对在打印部分使用 Java Collection 类,则可以将所有电影标题添加到 Collection 中,然后对其进行排序(或使用排序后的集合,该集合将在添加时保持排序顺序,类似于 #1)。如果你走那条路,你需要实现一个比较器

于 2013-11-04T15:36:56.727 回答