TreeSet

TreeSet中的元素不可重复,可自动排序。

TreeSet<Integer> treeset = new TreeSet<>();//构建TreeSet

 排序功能演示

public class Main {
    public static void main(String args[]) { 
        TreeSet<Integer> treeset = new TreeSet<>();
        treeset.add(12);
        treeset.add(13);
        treeset.add(1);
        treeset.add(0);
treeset.add(0);//测试TreeSet的元素可重复性 treeset.add(
15); Iterator<Integer> it = treeset.iterator(); while(it.hasNext()){ Integer next = it.next(); } for (Integer i:treeset) { System.out.println(i); } } }
输出:
0
1
12
13
15
//输出结果只有一个0

需要注意的是,TreeSet对自定义类型不能进行排序、

class Stu{
    int age ;
    public Stu(int age) {
        this.age = age;
    }
    
}
public class Main {
    public static void main(String args[]) { 
        TreeSet<Stu> trees = new TreeSet<>();
        Stu s1 = new Stu(1);
        Stu s2 = new Stu(2);
        Stu s3 = new Stu(45);
        trees.add(s1);
        trees.add(s2);
        trees.add(s3);

        for (Stu i:trees) {
            System.out.println(i);
        }

    }
}
运行以上代码后出现报错:Stream.Stu cannot be cast to java

此时,我们需要为自定义类实现比较接口Comparable,代码示例:

class Stu implements  Comparable<Stu>{
    int age ;
    public Stu(int age) {
        this.age = age;
    }
    @Override
    public int compareTo(Stu o) {
        if(this.age>o.age) {
            return 1;
        }else if(this.age<o.age) {
            return -1;
        }
        // TODO Auto-generated method stub
        return 0;
    }
    @Override
    public String toString() {
        return "Stu [age=" + age + "]";
    }
    
}
public class Main {
    public static void main(String args[]) { 
        TreeSet<Stu> trees = new TreeSet<>();
        Stu s1 = new Stu(1);
        Stu s2 = new Stu(100);
        Stu s3 = new Stu(50);
        trees.add(s1);
        trees.add(s2);
        trees.add(s3);

        for (Stu i:trees) {
            System.out.println(i);
        }

    }
}
输出:
Stu [age=1]
Stu [age=50]
Stu [age=100]


总结:对于自定义的类型,想要在TreeSet中实现排序,必须实现Comparable接口或者编写Comparator比较器,制定其比较规则!JDK自己提供的数据类型不用程序员实现Comparable接口或者编写Comparator比较器是因为它的底层源码都实现了Comparable接口,具有了比较规则,故可以排序!所以在对自定义类构建TreeSet时要注意自行编写比较方法

 

posted @ 2023-11-21 19:42  kandhera  阅读(53)  评论(0)    收藏  举报