我尝试使用自己实现的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不起作用相同。你似乎也把括号搞砸了。