Set集合(TreeSet)

博客介绍了TreeSet的排序器使用,指出需重写compareTo方法进行自然排序,调用实体类时会用到。同时说明可自定义排序器,如按年龄排序,自定义后能按期望排序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

TreeSet

TreeSet需要重写排序器compareTo的方法才能输出不会出错。这个是自然排序器

1 @Override
2     public int compareTo(Person o) {
3         // TODO Auto-generated method stub
4         return this.sid-o.sid;
5     }

然后在Temp类调用实体类的时候会用的到:

 //自然排序器
//        Set<Person> s=new TreeSet<>();
//        System.out.println(new Person(1, "zs", 18));
//        System.out.println(new Person(1, "zs", 18));
//        System.out.println(new Person(1, "Is", 18).equals(new Person(1, "zs", 18)));
//        s.add(new Person(1, "zs", 18));
//        s.add(new Person(1, "zs", 18));
//        s.add(new Person(2, "Is", 19));
//        s.add(new Person(3, "ww", 20));
//        s.add(new Person(4, "qq", 21));
//        System.out.println(s.size());
//        for(Person p:s) {
            //默认转换String的类型
//            System.out.println(p);
//        }

以上是它compareto自己的排序器,但是我们能自定义排序器的,接下来我们定义一个按照年龄的排序器:

 1 package com.temp;
 2 
 3 import java.util.Comparator;
 4 
 5 public class Age implements Comparator<Person> {
 6 
 7     @Override
 8     public int compare(Person o1, Person o2) {
 9         // TODO Auto-generated method stub
10         return o1.getSage()-o2.getSage();
11     }
12 
13 }
 1 //自定义排序器
 2         Set<Person> s=new TreeSet<>(new Age());
 3         System.out.println(new Person(1, "zs", 18));
 4         System.out.println(new Person(1, "zs", 18));
 5         System.out.println(new Person(1, "Is", 18).equals(new Person(1, "zs", 18)));
 6         s.add(new Person(1, "zs", 18));
 7         s.add(new Person(1, "zs", 18));
 8         s.add(new Person(2, "Is", 19));
 9         s.add(new Person(3, "ww", 200));
10         s.add(new Person(4, "qq", 21));
11         System.out.println(s.size());
12         for(Person p:s) {
13             //默认转换String的类型
14             System.out.println(p);
15         }

自定义自己的排序器后它就会按照我们的想要的排序去排序。上面这个就是按照年龄排序的自定义排序器

 

转载于:https://www.cnblogs.com/hyfl/p/10904591.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值