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]