2016-03-23 2 views
-1

Моя программа предназначена для чтения текстового файла и вставки имен в однострочный список и печати названий в алфавитном порядке. В классе имен есть метод compareTo и equals, который необходимо использовать в однострочном списке класс. В классе singleLinkedList я использовал метод addToList для первоначального создания списка. Мне удается получить каждое имя в списке, но я не знаю, как использовать метод compareTo для сортировки списка по алфавиту в классе singlelinkedlist. Вот мой код: Имя класса:Нужна помощь в сортировке 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; 
} 
} 
} 

Главная Driver:

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

} 
+0

Здесь решается http://stackoverflow.com/questions/27410241/sorting-a-list-alphabetically-using-compareto-method?rq=1 – RubioRic

ответ

0

Вы должны реализовать компаратор на классе Name.

public class Name implements Comparator<Name>{ 

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

Как использовать этот метод, чтобы отсортировать мой список, хотя ? – javaprog431