TreeSet排序方式

方式一:让自定义的类(如学生类)实现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]]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值