Java集合——TreeSet

181 篇文章 3 订阅
21 篇文章 1 订阅

TreeSet

存储结构:红黑树

基于排列顺序实现元素不重复
实现了SortedSet接口,对集合元素自动排序
元素对象的类型必须实现Comparable接口,指定排序规则
通过CompareTo方法确定是否为重复元素

简单示例

package set;

import java.util.TreeSet;

public class TreeSetDemo {
    public static void main(String[] args) {
        TreeSet<String> tree = new TreeSet<String>();
        tree.add("a");
        tree.add("b");
        tree.add("c");
        tree.add("abc");
        System.out.println(tree.size());
        tree.forEach(System.out::println);
        System.out.println("---------------");
        System.out.println(tree.toString());
        tree.remove("b");
        System.out.println("-------------");
        tree.forEach(System.out::println);
    }
}

详细示例1(使用Comparable接口)

在这里插入图片描述

为了将自定义类添加进TreeSet我们需要这样做

编写自定义类继承Comparable接口实现

package set.entity;

public class Person implements Comparable<Person> {
    private String name;
    private int age;

    public Person() {
    }

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    @Override
    public int compareTo(Person o) {

        //比较结果:若比较结果相同则为0,不同则返回字典比较差值
        int nameComp = this.getName().compareTo(o.getName());
        int ageComp = this.getAge() - o.getAge();
        System.out.println("..........");
        System.out.println(nameComp);
        return nameComp == 0 ? ageComp : nameComp;
    }
}

测试类

package set;

import set.entity.Person;

import java.util.TreeSet;

public class TreeSetDemo2 {
    public static void main(String[] args) {
        TreeSet<Person> tree = new TreeSet<>();
        tree.add(new Person("zhangsan",10));
        tree.add(new Person("wangqiang",18));
        tree.add(new Person("lisi",15));
        tree.forEach(System.out::println);
    }
}


结果

在这里插入图片描述

详细示例2(使用Comparator接口)

package set;

import set.entity.Person;

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

public class TreeSetDemo3 {
    public static void main(String[] args) {
        TreeSet<Person> tree = new TreeSet<>(new Comparator<Person>() {
            @Override
            public int compare(Person o1, Person o2) {
                int nameCom = o1.getName().compareTo(o2.getName());
                int ageCom = o1.getAge() - o2.getAge();
                return nameCom == 0 ? ageCom : nameCom;
            }
        });

        tree.add(new Person("zhangsan",10));
        tree.add(new Person("wangqiang",18));
        tree.add(new Person("lisi",15));
        tree.forEach(System.out::println);
    }
}

结果

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值