TreeSet集合

TreeSet集合的特点:

排序,去重

TreeSet排序的两种方式:

1.自然排序 
	1.1类实现Comparable
    1.2重写compareTo方法
    1.3根据方法的返回值,来阻止排序规则
                负数:左边走
                正数:右边走
                0:不存 第一次添加为树根就需要存
2.比较器排序 Comparator
public class TreeSetDemo1 {
    /*
        TreeSet集合的特点:排序,去重
     */
    public static void main(String[] args) {
        TreeSet<String> treeSet = new TreeSet<>();
        treeSet.add("a");
        treeSet.add("a");
        treeSet.add("b");
        treeSet.add("b");
        treeSet.add("c");
        treeSet.add("c");
        treeSet.add("d");
        treeSet.add("d");
        //这里展示排序去重的效果
        System.out.println(treeSet);
        System.out.println("------------------------");

        /*
        TreeSet集合存储Student学生对象
            compareTo 方法的返回值:
                0:只有一条[Student{name = 张三, age = 25}]
                1:[Student{name = 张三, age = 25}, Student{name = 李四, age = 18}, Student{name = 王五, age = 22}, Student{name = 赵六, age = 23}]
                1正序排列 -1倒序排列
                所有我们需要在compareTo方法中将返回值的逻辑写一下
                return this.age-o.age;

         */
        /*
        这里是TreeSet排序(自然排序) this.age-o.age
            1.类实现Comparable
            2.重写compareTo方法
            3.根据方法的返回值,来阻止排序规则
                负数:左边走
                正数:右边走
                0:不存 第一次添加为树根就需要存
          倒序排序:o.age-this.age
         */
        //单单比较年龄是不太好的,String源码实现了Comparable<String>,所以自带了这个类型的compareTo的方法
        //compareTo方法进行改变:根据年龄做主要排序,根据姓名做次要排序,判断姓名是否相同
        //        int ageResult=this.age-o.age;
        //        int nameResult =ageResult==0?this.name.compareTo(o.name):ageResult;
        //        int result =nameResult ==0?1:nameResult;
        //        return result;
        TreeSet<Student> ts = new TreeSet<>();
        ts.add(new Student("张三",25));
        ts.add(new Student("李四",18));
        ts.add(new Student("王五",22));
        ts.add(new Student("赵六",23));

        System.out.println(ts);
        System.out.println("----------------------");
        //TreeSet排序(比较器排序)比较器排序优先于自然排序
        //使用场景:比如String这类泛型的TreeSet进行排序,不满意自然排序的规则,想改的话就可以用比较器重写里面的方法
        TreeSet<Student> ts2 = new TreeSet<>(new Comparator<Student>() {
            @Override
            //o1相当于this o2相当于o
            //这里玩一下倒序
            public int compare(Student o1, Student o2) {
                int AgeResult = o2.getAge()-o1.getAge();
                int result = AgeResult==0?o2.getName().compareTo(o1.getName()):AgeResult;
                return result;
            }
        });
        ts2.add(new Student("张三",25));
        ts2.add(new Student("李四",18));
        ts2.add(new Student("王五",22));
        ts2.add(new Student("赵六",23));

        System.out.println(ts2);
    }
}

输出结果:

[a, b, c, d]
------------------------
[Student{name = 李四, age = 18}, Student{name = 王五, age = 22}, Student{name = 赵六, age = 23}, Student{name = 张三, age = 25}]
----------------------
[Student{name = 张三, age = 25}, Student{name = 赵六, age = 23}, Student{name = 王五, age = 22}, Student{name = 李四, age = 18}]

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值