Java集合框架 Set接口实现类--TreeSet补充: Comparator接口
Posted Z && Y
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java集合框架 Set接口实现类--TreeSet补充: Comparator接口相关的知识,希望对你有一定的参考价值。
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知识33 集合框架 List接口 Map 和set多测师
Java中集合框架,Collection接口Set接口List接口Map接口,已经常用的它们的实现类,简单的JDK源码分析底层实现