【java】集合TreeSet

/**
 * 1、TreeSet集合底层实际上是一个TreeMap
 * 2、TreeSet集合中的元素:无序不可重复,但可按照元素的大小顺序自动排序,称为:可排序集合。
 * 3、放到TreeSet集合中的元素,等同于放到TreeMap集合key部分。
 * 4、自定义类型时,排序有两种方式:
 *      第一种:放在集合中的元素实现java.lang.Comparable接口。
 *      第二种:在构造TreeSet或者TreeMap集合的时候传递一个比较器对象。
 * 5、Comparable和Comparator怎么选择?(Comparable是java.lang包下的,Comparator是java.util包下的)
 *      当比较规则不会发生改变的时候,或者说当比较规则只有1个的时候,建议实现Comparable接口。
 *      若比较规则有多个,且需要多个比较规则之间频繁切换,建议使用Comparator接口。
 */
public class TreeSetTest01 {
    public static void main(String[] args) {
        TreeSet<String> ts1 = new TreeSet<>();
        ts1.add("haha");
        ts1.add("hehe");
        ts1.add("heihei");
        ts1.add("xixi");
        for(String s : ts1){
            //按照字典顺序升序
            System.out.println(s);
        }
    }
}

自定义类型时排序:

一:实现Compara接口

//实现Comparable接口
public class TreeSetTest05 {
    public static void main(String[] args) {
        TreeSet<We> ts = new TreeSet<>();
        ts.add(new We(142));
        ts.add(new We(23));
        ts.add(new We(28));
        for(We w : ts){
            System.out.println(w);
        }
    }
}
class We implements Comparable<We>{
    int age;
    public We(int age){
        this.age = age;
    }

    @Override
    public String toString() {
        return "Cpp{" +
                "age=" + age +
                '}';
    }
    @Override
    public int compareTo(We o) {
        return this.age - o.age;//升序
    }
}

二:实现比较器:

/实现比较器的第一种代码编写方式(需要先编写一个比较器取继承ComparaTor<>)
public class TreeSetTest02 {
    public static void main(String[] args) {
        //给构造方法传递一个比较器
        TreeSet<Vip> vip = new TreeSet<>(new VipComparator());
        vip.add(new Vip(2000));
        vip.add(new Vip(200));
        vip.add(new Vip(138));
        vip.add(new Vip(221));
        for(Vip v : vip){
            System.out.println(v);
        }
    }
}
class Vip{
    int age;
    public Vip(int age){
        this.age = age;
    }

    @Override
    public String toString() {
        return "vip{" +
                "age=" + age +
                '}';
    }
}
//单独编写一个比较器
class VipComparator implements Comparator<Vip>{
    public int compare(Vip v1,Vip v2){
        return v1.age - v2.age;
    }
}
//实现比较器的第二种方式(使用匿名内部类,无需单独编写出比较器)
public class TreeSetTest03 {
    public static void main(String[] args) {
        //使用匿名内部类(这个类没有名字,直接new接口实现)
        TreeSet<Vip1> ts = new TreeSet<>(new Comparator<Vip1>() {
            @Override
            public int compare(Vip1 v1, Vip1 v2) {
                return v1.age - v2.age;
            }
        });
    }
}
class Vip1{
    int age;
    public Vip1(int age){
        this.age = age;
    }

    @Override
    public String toString() {
        return "vip{" +
                "age=" + age +
                '}';
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值