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()排序原理之字符串
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.