1

リストのように機能するというクラスがListNodeあります。このクラスを使用して、Magazine オブジェクトのリストを作成します。私のMagazineListクラスでは add メソッドを編集したいので、Magazines を挿入するとアルファベット順にソートされます。これどうやってするの?

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クラスの add メソッド:

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

2 に答える 2

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());
}
于 2013-09-25T05:40:03.330 に答える
1

これを行う簡単な方法の 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);
   }
}
于 2013-09-25T05:45:07.517 に答える