我创建了一个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);
}
}
我做错了什么?提前谢谢。
答案 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(...)
方法实现进行排序。