Java 使用比较器对TreeSet进行自定义排序

比较器是个很方便的工具

一般定义格式为

public static class 类名 implements Comparator{
        @Override
        public int compare(Object o1, Object o2) {
            // TODO Auto-generated method stub
            return o1 - o2;//升序
            //return o2 - o1;降序
        }

}

对于一个类来说,比如图书类,定义一个比较器之后,就可以对图书类的价格属性进行排序,升序降序都可以。也可以对图书类的名字进行排序。

在创建集合类的时候传入一个比较器对象,系统就会识别比较器中的方法了。
例如:

TreeSet<Book> treeset = new TreeSet<Book>(new MyComparator());

下面是使用TreeSet集合+比较器对图书类价格实现的升序排序

package test;

import java.util.Comparator;
import java.util.TreeSet;

public class 比较器的使用 {

    public static class Book{
        String name;
        int price;

        public Book(String name, int price) {
            this.name = name;
            this.price = price;
        }

        @Override
        public String toString() {
            // TODO Auto-generated method stub
            return "Book:" + name + "   Price:" + price;
        }
    }

    /**
     * 
     * @author Administrator
     * 升序比较器,降序只要将b1,b2换个顺序即可
     */
    public static class MyComparator implements Comparator{

        @Override
        public int compare(Object o1, Object o2) {
            // TODO Auto-generated method stub
            Book b1 = (Book) o1;
            Book b2 = (Book) o2;
            return b1.price - b2.price;
        }

}

    public static void main(String[] args) {

        TreeSet<Book> treeset = new TreeSet<Book>(new MyComparator());

        treeset.add(new Book("动物世界",50));
        treeset.add(new Book("时间简史",25));
        treeset.add(new Book("探索发现",60));
        treeset.add(new Book("恐龙时代",20));

        System.out.println(treeset);


    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值