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 编辑 ]