JAVA集合四:比较器--类自定义排序
2024-10-07 11:12:25
参考链接:
前言
对于JAVA集合,都能够用集合的工具类Collections 提供的方法:
- Collections.sort(List list)
- Collections.sort(List list, Comparator c)
来进行排序。很多时候,集合中存储的不是基本的数据类型,而是我们自己定义的类的对象,我们希望用自己的排序方式对集合中的元素进行排序,我们可以通过让类实现Comparable接口来自定义排序方式,也可以采用创建匿名内部类的做法进行自定义排序。
实现Comparable接口
让待排序的类继承Comparable接口,并实现compareTo方法(相当于给类提供了排序依据)
package blog; /*
* Student 类
*/
public class Student implements Comparable<Student>{
private String name;
private int id;
public Student(String name, int id) {
this.name = name;
this.id = id;
}
@Override
public String toString() {
return "Student [name=" + name + ", id=" + id + "]";
}
//实现对象比较的方法(id从小到大排序)
@Override
public int compareTo(Student o) {
if(id < o.id)
return -1;
else
return 1;
}
}
直接使用Collections.sort(List list)进行排序
package blog; import java.util.ArrayList;
import java.util.Collections;
import java.util.List; public class Main {
public static void main(String[] args) {
List<Student> students = new ArrayList<Student>();
students.add(new Student("xsy", 2));
students.add(new Student("theory", 1));
students.add(new Student("衍射",3)); //排序前
System.out.println("排序前:");
for(Student student : students) {
System.out.println(student);
} //排序后(按照id从小到大)
Collections.sort(students);
System.out.println("排序后:");
for(Student student : students) {
System.out.println(student);
}
}
}
排序前:
Student [name=xsy, id=2]
Student [name=theory, id=1]
Student [name=衍射, id=3]
排序后:
Student [name=theory, id=1]
Student [name=xsy, id=2]
Student [name=衍射, id=3]
JAVA创建匿名内部类
类不需要继承接口,只需要在排序时重写Comparator的compare方法:
package blog;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Student> students = new ArrayList<Student>();
students.add(new Student("xsy", 2));
students.add(new Student("theory", 1));
students.add(new Student("衍射",3));
//排序前
System.out.println("排序前:");
for(Student student : students) {
System.out.println(student);
}
//排序后(按照id从小到大)-- 重写Comparator的compare方法
Collections.sort(students, new Comparator() {
@Override
public int compare(Object o1, Object o2) {
if(o1 instanceof Student && o2 instanceof Student) {
Student s1 = (Student)o1;
Student s2 = (Student)o2;
return s1.getId()-s2.getId();
}
return 0;
}
});
System.out.println("排序后:");
for(Student student : students) {
System.out.println(student);
}
}
}
运行结果如下:
排序前:
Student [name=xsy, id=2]
Student [name=theory, id=1]
Student [name=衍射, id=3]
排序后:
Student [name=theory, id=1]
Student [name=xsy, id=2]
Student [name=衍射, id=3]
最新文章
- [deviceone开发]-心形点赞动画示例
- QtCreator下运行opencv出现realloc():pointer invalid
- 2012年湖南省程序设计竞赛E题 最短的名字
- C#中的五个访问修饰符
- XMLHttpRequest 对象
- Eclipse使用代码清理功能(Clean Up)
- 如何把rtf、doc文件转换为HTML文件
- Visual StudioTools for Unity 使用技巧2
- C++ 静态、动态链接库的简单实现
- MIME协议
- js格式转换
- Lua学习(5)——迭代器与泛型for
- C#实现SQLSERVER数据库中有序GUID生成(NewSequentialId)
- Call From master/192.168.128.135 to master:8485 failed on connection exception: java.net.ConnectException: Connection refused
- Google Guava
- Caused by: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Truncated incorrect DOUBLE value: &#39;L
- 在linux系统中出现u盘问题 的相关解决方法
- 18.17 U-Boot+内核移植
- 从身份证号码中获取性别、出生日期、籍贯,并更新mongodb
- python property的用法