使用自己实现的链表时出错



我尝试使用自己实现的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);
    }

打印:

project11.Node@139a55
project11.Node@1db9742
project11.Node@106d69c

当我使用collection.sort 时

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

它告诉我:Collections类型中的方法排序(List,Comparator)不适用于参数(LinkedList,Stock.MyTitleComp)

有人能解释一下这些错误以及如何改正吗。

您看到的第一个和第三个错误是因为您创建了自己的列表,但您没有实现list接口,所以在列表上工作的方法(或Iterable,这个是list的超级接口)不能在它上工作。一旦您实现了接口,它就会在上工作

第二个错误只是缺少类的toString()实现,所以您从Object获得了这个toString实现,它给出了一个不太可读的打印,用您希望如何打印类来覆盖它

对于#1,它意味着它所说的。您只能在java.lang.Iterable接口或数组的实现器上使用for each循环。

对于#2,您将了解为什么默认的Object.toString()包含哈希代码?。

对于#3,您的列表仍然没有实现java.util.List接口,因此Collections.sort无法对其执行任何操作,原因与#1不起作用相同。你似乎也把括号搞砸了。

相关内容

  • 没有找到相关文章

最新更新