首页 > 解决方案 > Collections.sort(列表) 不适用于 HashSet

问题描述

我创建了一个HashSet包含 type 的元素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);
    }

BookComparable实现如下的类

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);
    }
}

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

标签: javacollectionshashsetcomparable

解决方案


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

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

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

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

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

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


推荐阅读