2016-04-04 3 views
1

独自の実装済みLinkedListを使用しようとしました。私が使用したときに独自の実装されたリンクリストを使用するとエラーが発生する

public class LinkedList<O> { 
     private Node<O> first,last; 
     private int count; 
     public LinkedList(){} 

     public Node getfirst(){ 
     if(first==null) return null; 
     else return first; 
     } 
     public Node getLast(){ 
     if(first==null) return null; 
     else return last; 
     } 
    public int getSize(){ 
     return count; 
    } 
    public void addFirst(Object x){ 
     if(first==null)first=last=new Node(x); 
     else{ 
      Node temp =new Node(x); 
      temp.next=first; 
      first=temp; 
     } 
     count++; 
    } 
    public void addLast(Object x){ 
     if(first==null)first=last=new Node(x); 
     else{ 
      last.next= new Node(x); 
      last=last.next; 
     } 
     count++; 
    } 
    public void add(Object x,int index){ 
     if(index==0)addFirst(x); 
     else if(index>=getSize())addLast(x); 
     else{ 
      Node current=first; 
      for(int i=0; i<index-1;i++) 
       current=current.next; 
      Node temp = new Node(x); 
      temp.next=current.next; 
      current.next=temp; 
      count++; 
     } 
    } 
    public boolean removeFirst(){ 
     if(first==null)return false; 
     else if(first==last){ 
      first=last=null; 
      count--; 
      return true; 
      } 
     else{ 
      first=first.next; 
      count--; 
      return true; 
      } 
    } 
    public boolean removeLast(){ 
     if(first==null)return false; 
     else if(first==last){ 
      first=last=null; 
      count--; 
      return true; 
      } 
     else{ 
      Node current=first; 
      for(int i=0;i<getSize()-2;i++) 
       current=current.next; 
      last=current; 
      last.next=null; 
      count--; 
      return true; 
      } 
    } 
    public boolean remove(int index){ 
     if(index==0)return removeFirst(); 
     else if(index==getSize()-1)return removeLast(); 
     else{ 
      Node current=first; 
      for(int i=0;i<index-1;i++) 
       current=current.next; 
      current.next=(current.next).next; 
      count--; 
      return true; 
      } 
    } 
} 




public class Node<E> { 
    E element; 
    Node<E> next; 
    public Node(E element) { 
     this.element = element; 
    } 
} 

は:

for(Book b:books){ 
     System.out.println(b); 
} 

をそれは私にエラーを与えた:だけなのでjava.lang.Iterable

の配列またはインスタンスを反復処理することができ、私が使用しようとしました:

for(Book current=books.getFirst(); current !=null; current=current.next){ 
    System.out.println(current); 
    } 

それを印刷:

[email protected] 
[email protected] 
[email protected] 

と私はcollection.sort

Collections.sort(books,new Comparator<Book>()){ 
public int compare(Book book1, Book book2) { 
    return book1.getTitle().compareToIgnoreCase(book2.getTitle()); 
    } 
    } 

を使用したときにそれは私を与えた:タイプのコレクションのメソッドソート(リスト、コンパレータ)は、引数には適用されません(LinkedListの、Stock.MyTitleComp)

誰かがこれらのエラーをどうか説明し、解決する方法を教えてください。

+0

そのすべてがうまくいきましたが、Collections.sort(書籍、新しいコンパレータ()) – Nicky

+0

でjava.lang.NullPointerExceptionが表示されます。ヌル値はありません。 – Nicky

答えて

2

表示されている最初と3番目のエラーは自分自身のリストを作成したからですが、List interfaceを実装していないので、リスト(またはIterable、これはListのスーパーインターフェースです)それで動作しません。

2番目のエラーは単純にtoString()クラスの実装が見つからないため、このtoString実装がObjectから取得されているため、読みにくくなってしまいます。あなたのクラスが印刷されるようにしたい

1

#1の場合、それは何を意味しますか。 java.lang.Iterableインターフェイスの複数の実装者に対してのみfor-eachループを使用できます。

#2の場合は、Why does the default Object.toString() include the hashcode?になっています。

#3の場合、あなたのリストはまだjava.util.Listインターフェイスを実装していないので、同じ理由で#Collections.sortは何もできません。あなたはまたカッコを台無しにしました。

関連する問題