使用比较器的方式实现TreeSet集合元素的排序

package com.javase.collection.set.treeset;

import java.util.TreeSet;

/**
 * TreeSet集合中的元素可排序的第二种方式:使用比较器的方式。
 *
 * 结论:放到TreeSet或者TreeMap集合key部分的元素要想做到排序,包括两种方式:
 *      第一种:放到集合中的元素实现java.lang.Comparable接口。
 *      第二种:在构造/创建TreeSet或者TreeMap集合的时候给它传一个比较器Comparator对象。
 *             (可以创建一个比较器对象类,也可以使用匿名内部类)
 *
 * Comparable和Comparator怎么选择呢?
 *      当比较规则不会发生改变的时候,或者说当比较规则只有一种的时候,建议实现Comparable接口。
 *      如果比较规则较多,并且多个比较规则之间需要频繁切换,建议使用Comparator接口。
 */
public class TreeSetText04 {
    public static void main(String[] args) {
//        TreeSet<WuGui> wuGuis = new TreeSet<>();//这样不行,没有通过构造方法传递一个比较器
//        创建集合  给构造方法传一个比较器
        TreeSet<WuGui> wuGuis = new TreeSet<>(new WuGuiComparator());
//        也可以不写比较器类WuGuiComparator,使用匿名内部类直接new接口Comparator
        /*
        TreeSet<WuGui> w = new TreeSet<>(new Comparator<WuGui>() {
            @Override
            public int compare(WuGui o1, WuGui o2) {
                return o1.getAge() - o2.getAge();
            }
        });
        */
//        添加元素
        wuGuis.add(new WuGui(999));
        wuGuis.add(new WuGui(888));
        wuGuis.add(new WuGui(11111));
        wuGuis.add(new WuGui(666));
        wuGuis.add(new WuGui(55555));
//        遍历集合
        for (WuGui wuGui : wuGuis) {
            System.out.println(wuGui);
        }
    }
}
/*
输出结果:
        WuGui{age=666}
        WuGui{age=888}
        WuGui{age=999}
        WuGui{age=11111}
        WuGui{age=55555}
 */
package com.javase.collection.set.treeset;

/**
 * 乌龟类
 */
public class WuGui {
    private int age;

    public WuGui() {
    }

    public WuGui(int age) {
        this.age = age;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "WuGui{" +
                "age=" + age +
                '}';
    }
}
package com.javase.collection.set.treeset;

import java.util.Comparator;

/**
 * 乌龟比较器类
 *     需要实现java.util.Comparator接口
 */
public class WuGuiComparator implements Comparator<WuGui> {
    @Override
    public int compare(WuGui o1, WuGui o2) {
        return o1.getAge() - o2.getAge();//正序排列,反过来写就是倒序排列即return o2.getAge() - o1.getAge();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值