方式一:让自定义的类(如学生类)实现Comparable接口,重写里面的compareTo方法来指定比较规则。
this.xxx-o.xxx 升序
o.xxx-this.xxx 降序
自定义Book类
public class Book implements Comparable<Book>{
private String bookName;//书籍名称
private int page;//书籍页数
private double price;//价格
//重写比较方法
@Override
public int compareTo(Book o) {
// this.xxx-o.xxx 升序
// o.xxx-this.xxx 降序
return o.page -this.page;//按page页码顺序降序输出
// 默认比较规则 return 0只输出第一行
// return 1按=顺数输出,
// return -1逆序输出。
}
public Book() {
}
public Book(String bookName,int page,double price) {
this.bookName = bookName;
this.page = page;
this.price = price;
}
public String getBookName() {
return bookName;
}
public void setBookName(String bookName) {
this.bookName = bookName;
}
public int getPage() {
return page;
}
public void setPage(int page) {
this.page = page;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
@Override
public String toString() {
return "Book [bookName=" + bookName + ", page=" + page + ", price=" + price + "]\n";
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((bookName == null) ? 0 : bookName.hashCode());
result = prime * result + page;
long temp;
temp = Double.doubleToLongBits(price);
result = prime * result + (int) (temp ^ (temp >>> 32));
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Book other = (Book) obj;
if (bookName == null) {
if (other.bookName != null)
return false;
} else if (!bookName.equals(other.bookName))
return false;
if (page != other.page)
return false;
if (Double.doubleToLongBits(price) != Double.doubleToLongBits(other.price))
return false;
return true;
}
}
实现类1实现自然排序
public static void main(String[] args) {
TreeSet<Book> bookSet = new TreeSet<Book>();
bookSet.add(new Book("p平凡的世界", 236, 36.6));
bookSet.add(new Book("s射雕英雄传", 340, 98));
bookSet.add(new Book("b白鹿原", 340, 76.7));
bookSet.add(new Book("l鲁滨逊漂流记", 123, 36.2));
bookSet.add(new Book("h活着", 98, 35));
System.out.println(bookSet);//按page页码顺序降序输出
//[Book [bookName=s射雕英雄传, page=340, price=98.0]
//, Book [bookName=p平凡的世界, page=236, price=36.6]
//, Book [bookName=l鲁滨逊漂流记, page=123, price=36.2]
//, Book [bookName=h活着, page=98, price=35.0]]
}
方式二:通过调用TreeSet集合有参数构造器,可以设置Comparator对象(比较器对象,用于指定比较规则。
new Comparator< >
实现类2实现比较器排序
TreeSet<Book> bookSet = new TreeSet<Book>(new Comparator<Book>() {//
@Override
public int compare(Book o1, Book o2) {//按书籍名升序输出
return o1.getBookName().compareTo(o2.getBookName());
}
});
bookSet.add(new Book("p平凡的世界", 236, 36.6));
bookSet.add(new Book("s射雕英雄传", 340, 98));
bookSet.add(new Book("b白鹿原", 340, 76.7));
bookSet.add(new Book("l鲁滨逊漂流记", 123, 36.2));
bookSet.add(new Book("h活着", 98, 35));
System.out.println(bookSet);
//[Book [bookName=b白鹿原, page=340, price=76.7]
//, Book [bookName=h活着, page=98, price=35.0]
//, Book [bookName=l鲁滨逊漂流记, page=123, price=36.2]
//, Book [bookName=p平凡的世界, page=260, price=36.6]
//, Book [bookName=s射雕英雄传, page=340, price=98.0]]