TreeSet

这篇博客介绍了Java中的TreeSet集合,重点讲述了如何进行自然排序和定制排序。在自然排序中,对象通过实现Comparable接口来确定顺序,而在定制排序中,通过Comparator接口进行自定义比较规则。文章提供了两个示例,一个是按照User对象的年龄自然排序,另一个是通过Comparator实现年龄定制排序。

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

1. TreeSet的使用

1.1 使用说明:

 

1.1.1向TreeSet中添加的数据,要求是相同类的对象。

 

1.1.2两种排序方式:自然排序 ---- 实现Comparable接口 和 定制排序(Comparator)

 

注意:TreeSet自然排序中比较两个对象是否相同的标准是: compareTo()返回0(不再是equals())

    1) 自然排序中,比较两个对象是否相同的标准为:compareTo()返回0.不再是equals().

    2) 定制排序中,比较两个对象是否相同的标准为:compare()返回0.不再是equals().

 

2常用的排序方式:

//方式一:自然排序

@Test

    public void test1(){

        TreeSet set = new TreeSet();

 

        //失败:不能添加不同类的对象

//        set.add(123);

//        set.add(456);

//        set.add("AA");

//        set.add(new User("Tom",12));

 

          //举例一:从小到大

//        set.add(34);

//        set.add(-34);

//        set.add(43);

//        set.add(11);

//        set.add(8);

 

        //举例二:报错

               set.add(new User("Tom",12));

        set.add(new User("Jerry",32));

        set.add(new User("Jim",2));

        set.add(new User("Mike",65));

        set.add(new User("Jack",33));

        set.add(new User("Jack",56));

 

 

        Iterator iterator = set.iterator();

          while(iterator.hasNext()){

            System.out.println(iterator.next());

        }

 

    }

 

 

//方式二:定制排序

    @Test

    public void test2(){

        Comparator com = new Comparator() {

            //照年龄从小到大排列

            @Override

            public int compare(Object o1, Object o2) {

                if(o1 instanceof User && o2 instanceof User){

                    User u1 = (User)o1;

                    User u2 = (User)o2;

                    return Integer.compare(u1.getAge(),u2.getAge());

                }else{

                    throw new RuntimeException("输入的数据类型不匹配");

                }

            }

        };

 

        TreeSet set = new TreeSet(com);

        set.add(new User("Tom",12));

        set.add(new User("Jerry",32));

        set.add(new User("Jim",2));

        set.add(new User("Mike",65));

        set.add(new User("Mary",33));

        set.add(new User("Jack",33));

        set.add(new User("Jack",56));

 

 

        Iterator iterator = set.iterator();

        while(iterator.hasNext()){

            System.out.println(iterator.next());

        }

    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值