Given the code fragments:
public class Book implements Comparator<Book> {
String name;
double price;
public Book() {
}
public Book(String name, double price) {
this.name = name;
this.price = price;
}
public int compare(Book b1, Book b2) {
return b1.name.compareTo(b2.name);
}
public String toString() {
return name + ":" + price;
}
}
and
List<Book> books = Arrays.asList(new Book("Beginning with Java", 2), new Book("A Guide to Java Tour", 3));
Collections.sort(books, new Book());
System.out.print(books);
What is the result?
A.
[A Guide to Java Tour:3.0, Beginning with Java:2.0]
B.
[Beginning with Java:2.0, A Guide to Java Tour:3.0]
C. A compilation error occurs because the Book class does not override the abstract method compareTo().
D. An Exception is thrown at run time.
題解
Book類別實作了Comparator介面,並使用Book物件的name欄位的字串辭典順序來作為排序的依據。
程式第36行,使用了Collections類別的sort方法並傳入Book這個Comparator物件來排序集合物件。
由於A的辭典順序在B的前面,因此排序之後會輸出:
[A Guide to Java Tour:3.0, Beginning with Java:2.0]