Java集合:TreeSet

TreeSet

  • TreeSet是SortedSet接口的实现类
  • TreeSet可以确保集合元素处于排序状态
  • 支持的排序方法:
    • 自然排序(默认)
    • 定制排序

自然排序

  • 调用compareTo(Object obj)方法来比较元素间的大小关系,然后将集合升序排列
  • 必须放入同类对象,否则会发生类型转换异常(使用泛型限制)
  • 不可重复
Set<Integer> set = new TreeSet<>();
//自然排序
set.add(5);
set.add(3);
set.add(1);
set.add(4);
System.out.println(set);

//输出结果
//[1, 3, 4, 5]

定制排序

通过重写Comparator接口中的compare实现

//把person对象存在TreeSet中并按照年龄排序
//使用Comparator的接口,并对其中的比较方法进行重写
class Person implements Comparator<Person> {
    int age;
    String name;

    //无参构造
    public Person() {}

    //有参构造,传入参数
    public Person(String name,int age) {
        this.age = age;
        this.name = name;
}
    //将compare重写为年龄的比较
    @Override
    public int compare(Person o1, Person o2) {
        if(o1.age > o2.age){
            return 1;
        }else if(o1.age < o2.age){
            return -1;
        }else{
            return 0;
        }
    }
}

使用:

public static void main(String[] args) {
    Person p1 = new Person("zs",34);
    Person p2 = new Person("ls",24);
    Person p3 = new Person("ww",34);
    Person p4 = new Person("ze",13);

    /*new Person()作为实参传入TreeSet类重载的构造方法中
      是实现了comparator接口类的对象
      作为comparator的输入参数
    */
    Set<Person> set = new TreeSet<Person>(new Person());
    set.add(p1);
    set.add(p2);
    set.add(p3);
    set.add(p4);

    for(Person p : set){
        System.out.println(p.name);
    }
}
/*输出结果
ze
ls
zs
*/

由与set集合不允许存在重复元素,当年龄相同时,只会添加第一个元素(推测需要通过重写其他内容进行优化)

使用方法

与HashSet的方法相同

  • add
  • remove
  • contains
  • clear
  • size
  • 遍历
  • ……
posted @ 2022-03-21 11:42  chachan53  阅读(40)  评论(0编辑  收藏  举报