数组排序
其中有数组排序和数组对象排序
数组一些数字排序则直接用Arrays.sort()加数组就可以。
数组对象则和list对象排序一样,实现接口,再用Arrays.sort()去排序。
其中,列表排序也是转成array排序后搞的,源代码中有
列表排序
对象排序
对象是学生,年龄和名字
class Student {
String name;
int age;
@Override
public String toString() {
return "Student [name=" + name + ", age=" + age + "]";
}
}
一种是类实现Comparable接口
这种方法是类里面进行了排序的说明,结果如代码里的正序
实现原理:
另一种是实现Comparator接口
结果如代码里的倒序
这是在排序对象的时候调用了Comparable,使用了一个匿名内部类
public static <T> void sort(List<T> list, Comparator<? super T> c) {
list.sort(c);
}
//以下是list 排序
default void sort(Comparator<? super E> c) {
Object[] a = this.toArray();
Arrays.sort(a, (Comparator) c); //相当于实现了比较后用数组排序
ListIterator<E> i = this.listIterator(); //遍历重新生成
for (Object e : a) {
i.next();
i.set((E) e);
}
}
代码
package standard;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class CompareUtil {
public static void main(String[] args) {
List<Student> students = new ArrayList<>();
students.add(new Student("zt", 12));
students.add(new Student("lw", 20));
students.add(new Student("zz", 6));
for (Student student : students) {
System.out.println(student.toString());
}
Collections.sort(students);
System.out.println("\n=====正序======");
for (Student student : students) {
System.out.println(student.toString());
}
Collections.sort(students, new Comparator<Student>() {
@Override
public int compare(Student o1, Student o2) {
// TODO Auto-generated method stub
return o1.age > o2.age ? -1 : 1;
}
});
System.out.println("\n=====倒序======");
for (Student student : students) {
System.out.println(student.toString());
}
}
}
class Student implements Comparable<Student> {
String name;
int age;
public Student(String name, int age) {
super();
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Student [name=" + name + ", age=" + age + "]";
}
@Override
public int compareTo(Student o) {
// TODO Auto-generated method stub
return this.age > o.age ? 1 : -1;
}
}
/**
*
* Student [name=zt, age=12]
*Student [name=lw, age=20]
*Student [name=zz, age=6]
*
*=====正序======
*Student [name=zz, age=6]
*Student [name=zt, age=12]
*Student [name=lw, age=20]
*
*=====倒序======
*Student [name=lw, age=20]
*Student [name=zt, age=12]
*Student [name=zz, age=6]
*
*/
reference
https://www.jianshu.com/p/9d1659e1fdb1
https://www.jianshu.com/p/57ec4df42924
网友评论