TreeSet排序详解(2种自然排序与自定义排序)

TreeSet排序详解(2种自然排序与自定义排序)-mikechen

TreeSet是Java中一个基于红黑树的有序集合,它提供了一些排序功能,如自然排序和自定义排序,下面详解TreeSet排序。

1.自然排序

当向TreeSet添加元素时,会按照它们的自然顺序进行排序。

TreeSet 会调用集合元素的 compareTo(Object obj) 方法,来比较元素之间的大小关系,然后将集合元素按升序排列,这种方式就是自然排序。

如下所示:

import java.util.TreeSet;

public class TreeSetExample {
    public static void main(String[] args) {
        // 创建一个TreeSet对象,使用自然排序
        TreeSet<String> treeSet = new TreeSet<String>();

        // 向集合中添加元素
        treeSet.add("apple");
        treeSet.add("banana");
        treeSet.add("orange");
        treeSet.add("pear");

        // 打印集合中的元素
        System.out.println("Sorted set: " + treeSet);
    }
}

输出:

Sorted set: [apple, banana, orange, pear]

可以看到,集合中的元素按照字母顺序进行了排序。

 

2.自定义排序

如果你想要TreeSet自定义排序,你需要重写compareTo方法,来定义一个自定义排序。

如下所示:

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

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

    public int compareTo(MyClass other) {
        return Integer.compare(age, other.age);
    }
}

这个例子中,我们按照年龄排序,你可以根据你的需求来自定义排序。

下面是一个完整的例子:

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

public class TreeSetExample {
    public static void main(String[] args) {
        // Create a TreeSet with a custom comparator
        TreeSet<String> treeSet = new TreeSet<String>(new MyComparator());

        // Add some elements to the TreeSet
        treeSet.add("apple");
        treeSet.add("banana");
        treeSet.add("orange");
        treeSet.add("pear");

        // Print the TreeSet
        System.out.println(treeSet);
    }
}

class MyComparator implements Comparator<String> {
    public int compare(String a, String b) {
        return b.compareTo(a);
    }
}

这个例子中,使用自定义的比较器来排序,我们使用MyComparator类来实现Comparator接口,按照字母的反向顺序排序。

以上就是TreeSet排序的详解,如果还想全面了解TreeSet,请查看;TreeSet底层数据结构与原理用法详解

陈睿mikechen

10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

关注「mikechen」公众号,获取更多技术干货!

后台回复面试即可获取《史上最全阿里Java面试题总结》,后台回复架构,即可获取《阿里架构师进阶专题全部合集

评论交流
    说说你的看法