package review;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class PersonTest {
/**
* 基本数据类型Comparable或者Comparator, 使用Collections.sort()进行排序的原理
*
* @param args
*/
public static void main(String[] args) {
// 存字符串
List<String> list1 = new ArrayList<>();
list1.add("ba");
list1.add("ca");
list1.add("aa");
System.out.println("原来的顺序 :" + list1);
mySort1(list1);
System.out.println("字母从高到低排序:" + list1);
mySort2(list1, new MyComparator());
System.out.println("字母从低到高排序:" + list1);
}
// 声明类型T,List的类型是T,T实现了Comparable接口,而且接口操作的对象可以是T类型或者是T的父类类型。
// 注意:Comparable对应c.compareTo()方法
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);
}
}
}
}
// 声明类型T,List的类型是T,Comparator是接口类型,接受传过来的子类对象,接口操作的类型是T及其父类类型
// 注意:Comparator对应cp.compare(a,b)方法
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);
}
}
}
}
}
// Comparator的子类,操作的类型应该是父类(具体类型),可以接受子类类型
// 覆盖接口Comparator中的compare方法
class MyComparator implements Comparator<String> {
@Override
public int compare(String o1, String o2) {
return o1.compareTo(o2);
}
}
Collections.sort()排序原理之字符串
最新推荐文章于 2024-06-18 15:21:58 发布