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

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);
	}
}
结果如下:

猜你喜欢

转载自blog.csdn.net/qq_32182637/article/details/79164643