ArrayList本身又包含ArrayList,如何排序?
对程序的要求大概是这样的:先建立一个类,Book。这个类包含 书名,ISBN,版本,价格,还有作者。一本书可以有很多个作者,所以这些作者,是要用ArrayList来存。另一个类,CollectionOfBooks,这个类与Book的关系也是ArrayList。这个类可以对这些Book进行不同方式的排序,按照书名,按照ISBN等等。
我现在的问题是我不知道怎么实现不同方式的排序。
老师说用Generics比较容易些,可是那个对我来说有些太复杂。最好有哪位能不用Generics的。还有就是怎么写compareTo,在这儿也没有思路了。。
另外,老师还说可以用Collection.sort(book) 来实现排序,这个我试了,确实可以。可问题是这个只能按照一种方式排序,是不是我要重写这个sort?如果是,怎么写?(我java基础比较差,理解的不多。虽然是问作业,但真的不是自己不学,只是老师讲得太快了。大家能给个思路就好,不用帮忙写代码)
程序代码:package laboration03_del02;
import java.util.*;
import java.lang.*;
public class Book implements Comparable <Book>
{
private String isbn, title;
private int edition;
private double price;
//private Author[] author = new Author[10];
ArrayList <String> author = new ArrayList<String>();
public Book(String isbn, String title, int edition, double price){
this.isbn = isbn;
this.title = title;
this.edition = edition;
this.price = price;
}
public ArrayList<String> getAuthors(){
//a.toArray();
return author;
}
public void addAuthor(String author_){
author.add(author_);
}
public String getTitle()
{
return title;
}
public String getISBN()
{
return isbn;
}
/* 我自己写的equals 和compareTo,当然都不对,也不知道怎么写*/
public int compareTo(Book other) {
String tit = this.title;
String othertitle = other.title;
boolean same = tit.equals(othertitle);
if(same == true) return 0;
else return 1;
}
public boolean equals(Object other)
{
if(!(other instanceof Book))
{
return false;
}
Book b = (Book)other;
return b.title.equals(title);
}
public String toString() {
String info = "ISBN: " + isbn + "\nTitle: " + title +
"\nEdition: " + edition + "\nPrice: " + price + "\n==========";
return info;
}
}
程序代码:package laboration03_del02;
import java.util.*;
import java.public class CollectionOfBooks<T> implements Comparable<Book>, Comparator<Book>
{
//Book[] books = new Book[100];
ArrayList<Book> book = new ArrayList<Book>();
public void addBook(Book book)
{
this.book.add(book);
}
public void removeBook(Book book)
{
this.book.remove(book);
}
public ArrayList<Book> getBooksByTitle()
{
Collections.sort(book);
//sortObjects(book);
return book;
}
public ArrayList<Book> getBooksByAuthor()
{
Collections.sort(book);
return book;
}
public ArrayList<Book> getBooksByISBN()
{
Collections.sort(book);
return book;
}
/*
public static <T extends Comparable <T>> void sort(List<T>[] arr)
{
int minindex;
List<T> temp;
System.out.println("Here");
for(int i = 0; i < arr.length - 1; i++)
{
minindex = i;
for(int j = i + 1; j < arr.length; j++)
{
//if(arr[j].compareTo(arr[minindex]) < 0)
if(((Comparable<T>) arr[j]).compareTo((T) arr[minindex]) < 0)
{
minindex = j;
}
temp = arr[i];
arr[i] = arr[minindex];
arr[minindex] = temp;
}
}
}
*/
/* 我自己写的equals 和compareTo,当然都不对,也不知道怎么写*/
public boolean equals(Book other)
{
System.out.println("-----------Called equals");
Book b = null;
String tit = b.getTitle();
return tit.equals(other);
}
public int compareTo(Book other)
{
System.out.println("-----------Called compareTo");
int res = 0;
//this.title.equals(other.title);
return res;
}
public void print()
{
for(Book s : book)
{
System.out.println(s);
}
}
public String toString()
{
String info = new String();
info = "There are " + book.size() + " book(s)";
return info;
}
public int compare(Book arg0, Book arg1) {
return 0;
}
}
[ 本帖最后由 vdestroyer 于 2010-9-27 16:54 编辑 ]



