2013-09-25 1 views
1

У меня есть класс под названием ListNode, который работает как список. Используя этот класс, я хочу создать список объектов журнала. В моем классе MagazineList я хочу отредактировать метод добавления, поэтому, когда я вставляю Magazine, они будут отсортированы в алфавитном порядке. Как я могу это сделать?Как использовать метод compareTo() для сравнения объектов в списке?

Мой ListNode класс:

public class ListNode { 
     private Object value; 
     private ListNode next; 

     //intializes node 
     public ListNode (Object initValue, ListNode initNext) { 
     value = initValue; 
     next = initNext; 
     } 

    //returns value of node 
    public Object getValue() { 
     return value; 
    } 

    //returns next reference of node 
    public ListNode getNext() { 
     return next; 
    } 

    //sets value of node 
    public void setValue (Object theNewValue) { 
     value = theNewValue; 
    } 

    //sets next reference of node 
    public void setNext (ListNode theNewNext) { 
     next = theNewNext; 
    } 
    } 

мой MagazineList класса метод дополню:

//when instantiated, MagazineList's list variable is set to null 
    public void add (Magazine mag) { 

     ListNode node = new ListNode (mag, null); 
     ListNode current; 

     if (list == null) 
     list = node; 
     else { 
     current = list; 
     while (current.getNext() != null) 
      current = current.getNext(); 
     current.setNext(node); 
     } 
    } 

Я использовал этот метод, чтобы сравнить Magazines в Magazine классе:

//compares the names (Strings) of the Magazines. 
    public int compareTo(Magazine mag2) { 
    return (title).compareTo(mag2.toString()); 
    } 

ответ

1

Один из простых способов сделать это - сохранить список всегда отсортированным.

Затем каждый раз, когда вы вставляете новый узел, начиная с головы, вы должны сравнить новый узел с каждым узлом в списке с помощью метода compareTo и вставить новый узел после узла, для которого compareTo возвращает положительный результат.

Основная реализация может быть такой. Вы должны улучшить его и рассмотреть краевые случаи и т. Д., Хотя.

//when instantiated, MagazineList's list variable is set to null 
public void add (Magazine mag) { 

    ListNode node = new ListNode (mag, null); 
    ListNode current; 

    if (list == null) 
    list = node; 
    else { 
    current = list; // you list head 
    while (node.compareTo(current) < 0) 
     current = current.getNext(); 
    ListNode next = current.getNext(); 
    current.setNext(node); 
    node.setNext(next); 
    } 
} 
+0

Спасибо за совет! Я должен выполнить его с этим конкретным внедрением, однако ... – nichi

+0

Я обновил, чтобы ответить, чтобы использовать вашу реализацию. – Mustafa

+0

Большое вам спасибо! Вы очень помогли :) – nichi

1

Как это

//compares the names (Strings) of the Magazines. 
public int compareTo(Magazine mag2) { 
    //assume that you have getTittle() method which returns Title 
    return title.compareTo(mag2.getTitle()); 
} 
+0

Как этот метод отличается от SO, упомянутый выше. –

+0

Я хочу использовать метод compareTo() в функции add() другого класса. Как мне это сделать? – nichi

 Смежные вопросы

  • Нет связанных вопросов^_^