繁体   English   中英

我如何按项目类型按字母顺序对我的Java链接(而非集合LinkedList)列表进行排序?

[英]How would I sort my java linked(not collections LinkedList) list by item type alphabetically?

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

至少有两种方法:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM