TreeMap自定义排序有两种方式:
- 1, 在Student类中实现Comparable,重写compareTo方法
- 2,在构造函数中new Comparator,匿名内部类,重写compare 方法
以下是第二种具体实现代码逻辑:
package com.example.demo;
import java.util.Comparator;
import java.util.TreeMap;
/**
* @Description: Tree Map demo
* @author: YZD
* @Date: 2020-02-12 18:53
* @Version: 1.0
*/
public class TreeMapDemo {
/**
* 需要对 key 和 value 排序时使用
* 底层使用红黑二叉树
*/
public static void main(String[] args) {
// 内部类重写 compare 对 key排序
TreeMap<Integer, Student> treeMap = new TreeMap<>(new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
// -1 升序 1 降序
if (o1 < o2) {
return 1;
}
if (o1 > o2) {
return -1;
}
return 0;
}
});
Student student = new Student(3, "s");
Student student2 = new Student(5, "s");
treeMap.put(3, student);
treeMap.put(5, student2);
for (Object o : treeMap.entrySet()) {
System.out.println(o);
}
//内部类重写 compare 对 类排序
TreeMap<Student, String> map = new TreeMap<>(new Comparator<Student>() {
@Override
public int compare(Student s1, Student s2) {
if (s1.age<s2.age){
return 1;
}
if (s1.age>s2.age){
return -1;
}
return 0;
}
});
map.put(student, "3");
map.put(student2, "5");
for (Object o : map.entrySet()) {
System.out.println(o);
}
}
public static class Student {
//成员变量
private int age;
private String name;
public Student(int age, String name) {
this.age = age;
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Student{" +
"age=" + age +
", name='" + name + '\'' +
'}';
}
}
}
效果: