利用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方法指定排序规则。