Java TreeSet集合

Java TreeSet集合
TreeSet集合实现了SortedSet接口, 可以对集合中元素进行自然排序, 要求集合中的元素必须是可比较的。

package Collection;

import java.util.Comparator;
import java.util.Objects;
import java.util.TreeSet;

/**
 * TreeSet集合
 * 		可以对元素进行自然排序, 要求元素必须是可比较的
 * 			1)创建TreeSet集合时,通过构造方法指定Comparator比较器
 * 			2)如果没有指定Comparator比较器, 要求元素的类必须实现Comparable接口
 */
public class Test {

    public static void main(String[] args) {
        //1) 创建TreeSet集合,存储Person对象, 在构造方法中指定Comparator比较器,按姓名升序排序
        TreeSet<Person> treeSet = new TreeSet<>(new Comparator<Person>() {
            //在匿名内部类中重写接口的抽象方法
            @Override
            public int compare(Person o1, Person o2) {
                //指定一个比较规则
                return o1.name.compareTo(o2.name);   //姓名升序
            }
        });

        //2)添加元素
        treeSet.add(new Person("lisi", 18));
        treeSet.add(new Person("feifei", 28));
        treeSet.add(new Person("yong", 35));
        treeSet.add(new Person("bin", 36));
        treeSet.add(new Person("zhang", 33));

        //3)直接打印
        System.out.println( treeSet );

        //4) 根据已有TreeSet创建新的TreeSet集合
        TreeSet<Person> treeSet22 = new TreeSet<>(treeSet);
        System.out.println( treeSet22 );

        //5) 使用TreeSet的无参构造, 没有指定Comparator比较器, 要求Person类实现Comparable接口
//        TreeSet<Person> treeSet33 = new TreeSet<>();
//        treeSet33.addAll(treeSet);
//        System.out.println( treeSet33.stream().sorted(new Person().compare()));
    }
    static class Person {
        String name;
        int age;

        public Person() {
        }

        public Person(String name, int age) {
            this.name = name;
            this.age = age;
        }

        @Override
        public String toString() {
            return  name + " " +age;
        }

//        @Override
//        public int compare(Object o1, Object o2) {
//            return o2.name.ToString(o1.name);
//        }

        @Override
        public boolean equals(Object o) {
            if (this == o) return true;
            if (!(o instanceof Person)) return false;
            Person person = (Person) o;
            return age == person.age && Objects.equals(name, person.name);
        }

    }
}

TreeSet集合底层是TreeMap,向TreeSet集合添加元素,实际上是把该元素作为键添加到了底层TreeMap中,TreeSet集合实际上就是底层TreeMap的键的集合。

package Collection;

import java.util.Comparator;
import java.util.Objects;
import java.util.TreeSet;
/**
 * 注意:
 * 		在TreeSet集合中, 是根据Comparator/Comparable的比较结果是否为0来判断是否为同一个对象
 * 		如果Comparator的compare()方法/Comparable的compareTo()方法的返回值为0 就认为是同一个对象
 *
 */
public class Test{

    public static void main(String[] args) {
        //创建TreeSet集合,存储Person对象, 通过构造方法指定Comparator比较器,按年龄降序排序
        TreeSet<Person> treeSet = new TreeSet<>(new Comparator<Person>() {
            @Override
            public int compare(Person o1, Person o2) {
                return o2.age - o1.age;
            }
        });

        //当前treeSet是根据年龄比较Person对象是否相同的, 在添加Person对象时, 如果年龄相同就认为是同一个对象
        treeSet.add(new Person("lisi", 18));
        treeSet.add(new Person("feifei", 18));
        treeSet.add(new Person("zhang", 18));
        treeSet.add(new Person("yong", 18));

        System.out.println( treeSet.size() ); 		// 1
        System.out.println( treeSet );
        System.out.println( treeSet.contains( new Person("wang", 18)));   //true
    }
    static class Person {
        String name;
        int age;

        public Person() {
        }

        public Person(String name, int age) {
            this.name = name;
            this.age = age;
        }

        @Override
        public String toString() {
            return  name + " " +age;
        }

//        @Override
//        public int compare(Object o1, Object o2) {
//            return o2.name.ToString(o1.name);
//        }


        @Override
        public boolean equals(Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;
            Person person = (Person) o;
            return age == person.age && Objects.equals(name, person.name);
        }
        
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值