JAVA 自定义比较器
参考链接:https://blog.csdn.net/whing123/article/details/77851737
Comparable
需要类实现Comparable接口,重写compareTo方法
Comparator
Comparator接口一般不会被集合元素类所实现,而是单独实现或者匿名内部类方式实现
重写compare()方法
Comparable
import java.util.*; public class RongQi { public static void main(String[] args) { Student s1 = new Student("Allen", 20, 1); Student s2 = new Student("Allen", 20, 45); Student s3 = new Student("Catalina", 40, 2); Student s4 = new Student("Diana", 30, 0); List<Student> l = new LinkedList(); l.add(s3); l.add(s1); l.add(s4); l.add(s2); Collections.sort(l);//对list排序 Iterator<Student> it = l.iterator(); while (it.hasNext()) { System.out.println(it.next()); } } static class Student implements Comparable<Student> { // public class Student{ private String name; private int age; private int id; // public Student() { // } public Student(String name, int age, int id) { this.name = name; this.age = age; this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public int getId() { return id; } public void setId(int id) { this.id = id; } @Override public String toString() { return "Student{" + "name='" + name + '\'' + ", age=" + age + ", id=" + id + '}'; } @Override public int compareTo(Student s1) { int cmp = name.compareTo(s1.name);// 继续加入ID if (cmp != 0) { return cmp; } else { int cmp1 = age - s1.age; if (cmp1 != 0) { return cmp1; } else { return id - s1.id; } } } } }
Student{name='Allen', age=20, id=1}
Student{name='Allen', age=20, id=45}
Student{name='Catalina', age=40, id=2}
Student{name='Diana', age=30, id=0}
我一般用 Comparator
import java.util.*; public class Main { public static void main(String[] args) { Student s1 = new Student("Allen", 20, 1); Student s2 = new Student("Allen", 20, 45); Student s3 = new Student("Catalina", 40, 2); Student s4 = new Student("Diana", 30, 0); List<Student> l = new LinkedList(); l.add(s3); l.add(s1); l.add(s4); l.add(s2); Collections.sort(l, new StudentComparator());// 对list排序 Iterator<Student> it = l.iterator(); while (it.hasNext()) { System.out.println(it.next()); } } static class Student { // public class Student{ private String name; private int age; private int id; public Student(String name, int age, int id) { this.name = name; this.age = age; this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public int getId() { return id; } public void setId(int id) { this.id = id; } @Override public String toString() { return "Student{" + "name='" + name + '\'' + ", age=" + age + ", id=" + id + '}'; } } static class StudentComparator implements Comparator { public int compare(Object o1, Object o2) { Student s1 = (Student) o1; Student s2 = (Student) o2; int cmp = s1.name.compareTo(s2.name);// 继续加入ID if (cmp != 0) { return cmp; } else { int cmp1 = s1.age - s2.age; if (cmp1 != 0) { return cmp1; } else { return s1.id - s2.id; } } } } }
Student{name='Allen', age=20, id=1}
Student{name='Allen', age=20, id=45}
Student{name='Catalina', age=40, id=2}
Student{name='Diana', age=30, id=0}
自定义数组排序
class Solution { static class StringComparator implements Comparator<String> { @Override public int compare(String s1, String s2) { //操作 return s1.compareTo(s2); } } public String minNumber(int[] nums) { String[] str = new String[nums.length]; String s =""; for (int i = 0; i < nums.length; i++) { str[i] = Integer.toString(nums[i]); } Arrays.sort(str, new StringComparator()); for(String ss:str){ s+=ss; } return s; } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
2019-12-16 逻辑回归--梯度下降
2018-12-16 多种连接