Java集合框架 Set接口实现类--TreeSet补充: Comparator接口

Posted Z && Y

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java集合框架 Set接口实现类--TreeSet补充: Comparator接口相关的知识,希望对你有一定的参考价值。

Java集合框架–TreeSet概述及使用


1. TreeSet补充: Comparator接口

  • 除了实现Comparable接口里的比较方法,TreeSet也提供了一个带比较器Comparator的构造方法,使用匿名内部类来实现它:

示例代码:

public class TreeSetDemo02 {
    public static void main(String[] args) {
        TreeSet<Student> treeSet = new TreeSet<>(new Comparator<Student>() {
            /**
             * MethodName: compare
             * Description: 如果年龄不同,就按照年龄的正序排序
             * 如果年龄相同, 就按照字符串自带的compareTo方法排序
             *
             * @return int
             */
            @Override
            public int compare(Student s1, Student s2) {
                int ageDiff = s1.getAge() - s2.getAge();
                return ageDiff == 0 ? s1.getName().compareTo(s2.getName()) : ageDiff;
            }
        });
        Student s1 = new Student("小明", 22);
        Student s2 = new Student("小立", 21);
        Student s3 = new Student("小周", 19);
        Student s4 = new Student("小王", 23);
        Student s5 = new Student("小邓", 20);
        treeSet.add(s1);
        treeSet.add(s2);
        treeSet.add(s3);
        treeSet.add(s4);
        treeSet.add(s5);
        treeSet.remove(new Student("小明", 22));
        System.out.println(treeSet.toString());
        treeSet.add(new Student("小明", 22));
        treeSet.add(new Student("小明", 22));
        treeSet.add(new Student("小明", 22));
        treeSet.add(new Student("小明", 22));
        treeSet.add(new Student("小明", 22));
        System.out.println("\\n" + treeSet.toString());
    }
}

/*
自定义学生类
 */
class Student {
    private final String name;
    private final int age;

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

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

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

运行结果:


2. 接下来我们来做一个小案例:

代码:

    public static void main(String[] args) {
        TreeSet<String> treeSet = new TreeSet<String>(new Comparator<String>() {
            /**
             * MethodName: compare
             * Description: 按照字符串长度排序, 如果长度相同, 就按照字符串自带的compareTo方法排序
             * @return int
             */
            @Override
            public int compare(String o1, String o2) {
                int n1 = o1.length() - o2.length();
                int n2 = o1.compareTo(o2);
                return n1 == 0 ? n2 : n1;
            }
        });
        treeSet.add("Hello World!");
        treeSet.add("Java the best!");
        treeSet.add("C#");
        treeSet.add("Go");
        treeSet.add("Python");
        treeSet.add("C");
        treeSet.add("C++");
        treeSet.add("JavaWeb");
        treeSet.add("javascript");
        treeSet.add("CSS");
        treeSet.add("html");
        treeSet.add("Angular");
        System.out.println(treeSet.toString());
    }

运行结果:



以上是关于Java集合框架 Set接口实现类--TreeSet补充: Comparator接口的主要内容,如果未能解决你的问题,请参考以下文章

Java集合框架 Set接口实现类--HashSet的使用

Java知识33 集合框架 List接口 Map 和set多测师

Java_集合框架

Java集合类框架的基本接口有哪些?

JAVA集合框架包含的内容

Java中集合框架,Collection接口Set接口List接口Map接口,已经常用的它们的实现类,简单的JDK源码分析底层实现