java - 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);
}
这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);
}
}
我做错了什么?提前致谢。
解决方案
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(...)
方法实现进行排序。
推荐阅读
- cesium - 是否可以将铯球移到中心的右侧?
- windows - .bat 文件中的管道分隔符
- rust - 如何从移动到结构中的 Vec 检索项目?
- excel - 如何从此功能中排除其他工作表?
- python - 当文件存储在列表或对象中时,为什么文件的最后访问时间会发生变化?
- python - 将负载分散到 GLPK 中不同的等成本变量上
- angular - 浏览器在 azure app 服务托管的根 index.html 上保留一个令人困惑的 Angular 应用程序缓存版本
- jquery - CSS3 淡出/淡入文本和图像从和到透明
- flutter - 如何在 quick_actions 上使用图标
- arrays - 使用某些东西是一种不好的做法吗?.isEmpty == true