Collections.sort(List <t>)不适用于HashSet <book>

时间:2018-06-15 09:06:49

标签: java collections hashset comparable

我创建了一个HashSet,其中包含Book(name, author)类型的元素。我已经实现了Comparable接口。但是调用Collections.sort()会导致错误。

  

sort(List<T>)类型中的方法Collections不适用于参数(HashSet<Book>

以下是添加书籍元素的示例

import java.util.Collections;
import java.util.HashSet;
public class BookHashSetDemo {
    public static void main(String[] args) {
        HashSet<Book> hashSet=new HashSet<Book>();
        Book book1=new Book("ABC","XYZ");
        Book book2=new Book("lmn","opq");
        Book book3=new Book("rst","uvw");
        Book book4=new Book("ABC","XYZ");

        hashSet.add(book1);
        hashSet.add(book2);
        hashSet.add(book3);
        hashSet.add(book4);

        System.out.println(hashSet);
        Book book=new Book();
        Collections.sort(hashSet);
    }

这是Book课,其中Comparable的实施方式如下

class Book implements Comparable<Book> {
    String name;
    String author;

    public Book(String name, String author) {
        this.name=name;
        this.author=author;
    }

    public String toString() {
        return author+"-->"+name;
    }

    @Override
    public int compareTo(Book o) {
        // TODO Auto-generated method stub
        return name.compareTo(o.name);
    }
}

我做错了什么?提前谢谢。

1 个答案:

答案 0 :(得分:2)

Collections.sort()接受List,但您尝试将Set传递给它,因此会发生错误。

根据问题中给出的示例,最好使用TreeSet

Set<Book> books = new TreeSet<>();

而且,如果Book类实现了Comparable<Book>接口,那么你可以写:

books.add(new Book("DEF", "XYZ"));
books.add(new Book("ABC", "XYZ");

TreeSet元素将根据Book.compareTo(...)方法实现进行排序。