利用Java中的现有方法实现对集合元素进行排序
2023-09-11 14:15:14 时间
利用Java中的现有方法实现对集合元素进行排序。
(1) Collections.sort(集合名); 如果参与排序的集合中存储的是自定义类型的对象,则对象对应类需要实现java.lang.Comparable接口,同时实现接口中 compareTo(Tt)方法指定排序规则。—》内置比较器。
public class TestSort {
public static void main(String[] args) {
ArrayList<Student> list = new
ArrayList<Student>
();
list.add(new Student("zihao",38,99.0));
list.add(new
Student("jingjing",18,95.0));
list.add(new
Student("zihang",48,89.0));
list.add(new Student("zibo", 42,
88.0));
list.add(new Student("jintao", 42,
90.0));
list.add(new Student("wenwen", 42,
89.0));
list.add(new Student("awei", 42,
89.0));
Collections.sort(list);
for(Student s:list) {
System.out.println(s);
}
}
}
public class Student implements
Comparable<Student>{
private String name;
private Integer age;
private Double score;
public Student() {
super();
}
public Student(String name,Integer
age,Double score) {
super();
this.name = name;
this.age = age;
this.score = score;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Double getScore() {
return score;
}
public void setScore(Double score) {
this.score = score;
}
@Override
public String toString() {
return "Student [name=" + name + ",
age=" + age +
", score=" + score + "]";
}
@ Override
public int compareTo(Student s) {
/* 将 this 和 s 对象进行比较
* 指定排序规则:age
* this.age 大于 s.age 1
* this.age 小于 s.age -1
* this.age 等 于 s.age 0
* 如果年龄相同时,再按照 成绩进行
排序
*/
if(this.age > s.age) {
return 1;
}else if(this.age<s.age) {
return -1;
}else {
// return 0;
if(this.score>s.score) {
return 1;
}else if(this.score<s.score) {
return -1;
}else {
// return 0;
return
this.name.compareTo(s.name);
}
}
}
}
(2) List接口中提供 默认方法 sort(Comparator c):如果参与排序的集合存储的是自定义类型的对象,则需要在参与比较的对象以外的地方定义一个匿名内部类(或是Lambda表达式)实现 java.util.Comparator接口,同时实现 compare(T t1,Tt2)方法指定排序规则。—》外置比较器.
public class TestSort2 {
public static void main(String[] args) {
List<Worker> list = new
ArrayList<Worker>();
list.add(new
Worker("zihao",38,20000.0));
list.add(new
Worker("awei",35,19000.0));
list.add(new
Worker("xingwang",48,25000.0));
list.add(new
Worker("jintao",37,18000.0));
// 制定的比较规则 -->匿名内部类
// Comparator<Worker> c = new
Comparator<Worker>() {
// public int compare(Worker w1,Workerw2) {
// /* 将 w1 和 w2进行 比较:按照年龄
// * w1.age 大于w2.age 1
// * w1.age 小于w2.age -1
// * 等于0
// */
// if(w1.getAge()>w2.getAge()) {
// return 1;
// }else if(w1.getAge()<w2.getAge()) {
// return -1;
// }else {
// return 0;
// }
// }
// };
// Lambda表达式
Comparator<Worker> c = (w1,w2) ->{
if(w1.getAge()>w2.getAge()) {
return 1;
}else if(w1.getAge()<w2.getAge()) {
return -1;
}else {
return 0;
}
};
list.sort(c);
for(Worker w:list) {
System.out.println(w);
}
}
}
public class Worker {
private String name;
private Integer age;
private Double salary;
public Worker() {
super();
}
public Worker(String name,Integer
age,Double salary) {
super();
this.name = name;
this.age = age;
this.salary = salary;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Double getSalary() {
return salary;
}
public void setSalary(Double salary) {
this.salary = salary;
}
@Override
public String toString() {
return "Worker [name=" + name + ",
age=" + age + ", salary=" + salary + "]";
}
}
补充:
Collections工具类
(1) 位于java.util包中对集合元素进行操作的工具类。
(2) 功能方法:
a. static void reverse(List list):将集合中元素进行倒置
b. static void shuffle(List list):对集合中元素进行随机显示
c. static void sort(List list):对集合元素进行排序。
注:如果参与排序的集合中存储的是自定义类型的对象,则对象对应类需要实现java.lang.Comparable接口,同时实现接口中 compareTo方法指定排序规则。
相关文章
- java高级用法之:在JNA中将本地方法映射到JAVA代码中
- Android NDK开发篇(四):Java与原生代码通信(原生方法声明与定义与数据类型)
- 【Java】java数据库连接池配置的几种方法
- 37 Java基础 总结 完结篇 知识串讲 Java语言初识 基础语法 流程控制 方法 数组 面向对象 内部类 异常 常用类 集合框架 IO流 多线程 网络编程 GUI 注解
- java执行bat代码
- java if语句
- 《Java编码指南:编写安全可靠程序的75条建议》—— 指南10:不要使用clone()方法来复制不可信的方法参数
- Java基本数据类型及字节
- 如何删除JAVA集合中的元素
- Java 设计模式之桥接模式,Java 桥接模式 ,java Bridge Pattern
- java.lang.OutOfMemoryError: Java heap space解决方法
- java 动态代理(模式) InvocationHandler(为类中方法执行前或后添加内容)
- Java不为人知的10个真相
- Java_类似java.lang.VerifyError: Expecting a stackmap frame at branch target 22 in method的解决方法
- JAVA学习.java.sql.date 与java.util.date以及gettime()方法的分析
- JAVA NIO non-blocking模式实现高并发服务器(转)
- 【JAVA】正则表达式及其相关的方法和对象
- 【JAVA基础】不同的jar拥有相同全限定类名和不同的方法Method时NoSuchMethodError,同名类加载问题 / 双亲委派
- List集合常用方法java与c#