栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java中的TreeSet

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java中的TreeSet

TreeSet集合的特点

  • 元素有序,这里的顺序不是指存储和取出的顺序,而是按照一定的规则进行排序,具体排序方式取决于构造方法
    TreeSet():根据其元素的自然排序进行排序
    TreeSet(Comparator comparator):根据指定的比较器进行排序
  • 没有带索引的方法,所以不能使用普通for循环遍历
  • 由于是Set集合,所以不包含重复元素的集合

存储整数并遍历

//创建集合对象
        TreeSet ts = new TreeSet();
        //注意不能用 int ,因为集合只能存储引用类型;应该用 int 类型的包装类类型Integer

        //添加元素,添加顺序是随便的
        ts.add(10);
        ts.add(30);
        ts.add(50);
        ts.add(40);
        ts.add(20);

		ts.add(30);//重复

        //遍历集合
        for(Integer i:ts){
            System.out.println(i);
        }

输出:

10
20
30
40
50

输出是按大小顺序的

自然排序Comparable的使用
  • 存储学生对象并遍历,创建TreeSet集合使用无参构造方法
  • 要求:按照年龄从小到大排序,年龄相同时,按照姓名的字母顺序排序

学生类:

public class Student implements Comparable{//实现Comparable接口
    private String name;
    private int age;

    public Student(){}
    public Student(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 int compareTo(Student s){

        int num = this.age - s.age;//按年龄从小到大排序

        //如果年龄相同,判断姓名是否相同
        if(num == 0){
            if(!this.name.equals(s.name)){//判断年龄是否相同
                return this.name.charAt(0) - s.name.charAt(0);//首字母的大小比较
            }
        }
            return num;

        
    }
}

Demo:

import java.util.TreeSet;

public class Demo {

    public static void main(String[] args) {

        //创建集合对象
        TreeSet ts = new TreeSet();//无参构造

        //创建学生对象,写拼音方便看
        Student s1 = new Student("xushi",29);
        Student s2 = new Student("huangzhaojun",28);
        Student s3 = new Student("diaochan",30);
        Student s4 = new Student("yangyuhuang",18);

        Student s5 = new Student("meinv",18);//年龄相同,姓名不同
        Student s6 = new Student("diaochan",15);//姓名相同,年龄不同(实现中也有同名的人嘛)
        Student s7 = new Student("diaochan",15);//姓名和姓名相同

        //把学生添加到集合
        ts.add(s1);ts.add(s2);ts.add(s3);ts.add(s4);
        ts.add(s5);ts.add(s6);ts.add(s7);

        //遍历集合
        for (Student s:ts){
            System.out.println(s.getName()+","+s.getAge());
        }
    }
}

输出:

diaochan,15
meinv,18
yangyuhuang,18
huangzhaojun,28
xushi,29
diaochan,30

结论

  • 用TreeSet集合存储自定义对象,无参构造方法使用的是自然排序对元素进行排序的
  • 自然排序,就是让元素所属的类实现Comparable接口,重写compareTo(To)方法
比较排序Comparator的使用
  • 存储学生对象并遍历,创建TreeSet集合使用带参构造方法
  • 要求:按照年龄从小到大排序,年龄相同时,按照姓名的字母顺序排序

步骤一:

  • 由上一题的学生类我们照用,但是重写的compareTo方法我们要删掉,再来使用。

步骤二:

  • 上一题的Demo类我们照用,但我们要修改一下创建对象的过程。
import java.util.Comparator;
import java.util.TreeSet;

public class Demo {

    public static void main(String[] args) {

        //创建集合对象,带参构造
        TreeSet ts = new TreeSet(new Comparator() {
            @Override
            public int compare(Student s1, Student s2) {
                int num = s1.getAge() - s2.getAge();//判断年龄是否相同
                num = num == 0?s1.getName().compareTo(s2.getName()):num;//年龄不相同的时候,比较姓名
                return num;
            }
        });

        //创建学生对象,写拼音方便看
        Student s1 = new Student("xushi",29);
        Student s2 = new Student("huangzhaojun",28);
        Student s3 = new Student("diaochan",30);
        Student s4 = new Student("yangyuhuang",18);

        Student s5 = new Student("meinv",18);//年龄相同,姓名不同
        Student s6 = new Student("diaochan",15);//姓名相同,年龄不同(实现中也有同名的人嘛)
        Student s7 = new Student("diaochan",15);//姓名和姓名相同

        //把学生添加到集合
        ts.add(s1);ts.add(s2);ts.add(s3);ts.add(s4);
        ts.add(s5);ts.add(s6);ts.add(s7);

        //遍历集合
        for (Student s:ts){
            System.out.println(s.getName()+","+s.getAge());
        }
    }
}

输出:

diaochan,15
meinv,18
yangyuhuang,18
huangzhaojun,28
xushi,29
diaochan,30

结论:

  • TreeSet集合存储自定义对象,带参构造方法使用的是比较器排序对元素进行排序的
  • 比较器排序,就是让集合构造方法接收Comparator的实现类对象,重写compare(T O1, T o2)方法
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/459882.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号