您的位置:首页 > 其它

Collections.sort()排序原理之复合数据类型

2018-01-25 17:33 337 查看
package review;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class PersonTest {

public static void main(String[] args) {
//存储复合数据类型
List<Person> persons = new ArrayList<>();
List<Student> students = new ArrayList<>();

persons.add(new Person(12,"Mary "));
persons.add(new Person(13,"Smith"));
persons.add(new Person(11,"David"));

students.add(new Student(18,"亮亮       "));
students.add(new Student(19,"花花       "));
students.add(new Student(17,"豆豆       "));

System.out.println("P-unsorted:"+persons);
System.out.println("S-unsorted:"+students+"\n");

mySort1(persons);
mySort1(students);
System.out.println("P-sorted-Comparable:"+persons);
System.out.println("S-sorted-Comparable:"+students+"\n");

mySort2(persons,new MyComparator());
mySort2(students,new MyComparator());
System.out.println("P-sorted-Comparator:"+persons);
System.out.println("S-sorted-Comparator:"+students+"\n");
}

//Comparable
private static <T extends Comparable<? super T>> void mySort1(List<T> list1) {
for (int i = 0; i < list1.size() - 1; i++) {
for (int j = i + 1; j < list1.size(); j++) {
if (list1.get(i).compareTo(list1.get(j)) > 0) {
Collections.swap(list1, i, j);
}
}
}
}

//Comparator
private static <T> void mySort2(List<T> list1, Comparator<? super T> cp) {
for (int i = 0; i < list1.size() - 1; i++) {
for (int j = i + 1; j < list1.size(); j++) {
if (cp.compare(list1.get(i), list1.get(j)) > 0) {
Collections.swap(list1, i, j);
}
}
}
}
}

//操作类型应该是具体类型的父类类型
class MyComparator implements Comparator<Person> {
@Override
public int compare(Person o1, Person o2) {
return o1.compareTo(o2);
}
}
结果如下:


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐