【问题标题】:Need help sorting a SingleLinkedList alphabetically需要帮助按字母顺序排序 SingleLinkedList
【发布时间】:2016-03-23 05:53:36
【问题描述】:

我的程序旨在读取文本文件并将名称插入单链表并按字母顺序打印名称。名称类中有一个 compareTo 和 equals 方法,需要在单链表类中使用。在 singleLinkedList 类中,我最初使用 addToList 方法创建列表。我设法将每个名称都放入列表中,但我不知道如何使用 compareTo 方法在 singlelinkedlist 类中按字母顺序对列表进行排序。这是我的代码: 名称类:

     public class Name implements Comparator<Name> {
       private String firstName;
       private String lastName;
    public Name(String firstName, String lastName) {
       super();
       this.firstName = firstName;
       this.lastName = lastName;
    }
    public String toString(){
       return firstName + " " + lastName;
    }
   public int compareTo(Name name){
      return (this.firstName).compareTo(name.firstName);
   }
    /**
    * @return the firstName
    */
    public String getFirstName() {
       return firstName;
    }
    /**
    * @param firstName the firstName to set
    */
    public void setFirstName(String firstName) {
       this.firstName = firstName;
    }
    /**
    * @return the lastName
    */
    public String getLastName() {
       return lastName;
    }
    /**
    * @param lastName the lastName to set
    */
    public void setLastName(String lastName) {
       this.lastName = lastName;
    }
    }

SingleLinkedList 类:

public class SingleLinkedList {
   private static Node head;
   private int listCount;
/**
* No-arg constructor
*/
public SingleLinkedList()
{
}
/**
* adds node to start
* @param name
*/
public void addToStart(Name name)
{
   head = new Node(name, head);
   listCount++;
}
/**
* adds node to list
* @param name
*/
public void addToList(Name name)
{
if(head != null)
{
   Node curr = head;
while(curr.next != null)
{
   curr = curr.next;
}
   curr.next = new Node(name);
}
else
{
   head = new Node(name);
}
   listCount++;
}
/**
* Number of nodes in the list
* 
* @return list count
*/
public int size()
{
   return listCount;
}
public String toString()
{
   StringBuilder sb = new StringBuilder();
   Node curr = head;
if(curr != null)
{
while(curr.next != null)
{
   sb.append(curr.name.toString());
   sb.append("\n");
   curr = curr.next;
}
   sb.append(curr.name.toString());
}
   return sb.toString();
}
private class Node
{
   private Name name;
   private Node next;
public Node(Name name)
{
   this.name=name;
   next = null;
}
public Node(Name name, Node next)
{
   this(name);
   this.next = next;
}
}
}

主驱动:

public class ClassListDriver {

/**
* @param args
*/
public static void main(String[] args) {
String filename="179ClassList.txt";
Scanner inputStream=null;
SingleLinkedList sll= new SingleLinkedList();
try
{
   inputStream=new Scanner(new File(filename));
}
catch(FileNotFoundException e){
   System.out.println("Error opening the file.");
   System.exit(0);
}
while(inputStream.hasNextLine()){
   String[] data=inputStream.nextLine().split(" ");
   String firstName=data[0];
   String lastName=data[1];
   Name name= new Name(firstName,lastName);
   sll.addToList(name);
}
System.out.println(sll);
System.out.println(sll.size());
}

}

【问题讨论】:

标签: java comparator compareto


【解决方案1】:

你需要在你的 Name 类上实现一个比较器。

public class Name implements Comparator<Name>{

// Overriding the compareTo method
   public int compareTo(Name name){
      return (this.firstName).compareTo(name.firstName);
   }
}

【讨论】:

  • 我如何利用这种方法对我的列表进行排序?
猜你喜欢
  • 2016-09-26
  • 1970-01-01
  • 1970-01-01
  • 2012-08-29
  • 1970-01-01
  • 1970-01-01
  • 2016-07-24
  • 2021-10-10
  • 2013-08-30
相关资源
最近更新 更多