sorting 排序
sorting-in-java
Java中提供了Arrays.sort()和Collections.sort()方法用來提供排序蔬螟,其中排序算法使用的是 QuickSort 快速排序算法,并且默認(rèn)是升序排列邮屁,如果使用降序排列菠齿,可以使用Collections.reverseOrder()方法做為參數(shù),同時(shí)sort方法還提供了局部排序的方法绳匀。
@Test
public void testA(){
Comparator comparator = (o1, o2) -> 0;
Comparable comparable = o -> 0;
Integer[] arr = { 13, 7, 6, 45, 21, 9, 101, 102 };
Arrays.sort(arr, 1, 3);
System.out.println(Arrays.toString(arr));
Arrays.sort(arr);
System.out.println(Arrays.toString(arr));
Arrays.sort(arr, Collections.reverseOrder());
System.out.println(Arrays.toString(arr));
String[] str = {"z", "a", "f", "b", "n", "m"};
Arrays.sort(str, 0, 3);
System.out.println(Arrays.toString(str));
Arrays.sort(str);
System.out.println(Arrays.toString(str));
Arrays.sort(str, Collections.reverseOrder());
System.out.println(Arrays.toString(str));
}
@Test
public void testB(){
List<Integer> list = Arrays.asList(13, 7, 6, 45, 21, 9, 101, 102 );
Collections.sort(list);
System.out.println(list);
Collections.sort(list, Collections.reverseOrder());
System.out.println(list);
List<String> strList = Arrays.asList("z", "a", "f", "b", "n", "m");
Collections.sort(strList);
System.out.println(strList);
Collections.sort(strList, Collections.reverseOrder());
System.out.println(strList);
}
// 獨(dú)立的比較器
import java.util.Comparator;
// 需要類實(shí)現(xiàn)接口疾棵,重寫compareTo方法
import java.lang.Comparable;
與此同時(shí)sort方法還可以接收Comparator比較器做為參數(shù)來實(shí)現(xiàn)自定義排序。Comparable 可以讓實(shí)現(xiàn)它的類的對(duì)象進(jìn)行比較殉了,類內(nèi)部要實(shí)現(xiàn) compareTo 方法拟枚。
class A implements Comparable<A>{
private int a;
/**
* - a1.compareTo(a2) > 0 即 a1 > a2
* - a1.compareTo(a2) = 0 即 a1 = a2
* - a1.compareTo(a2) < 0 即 a1 < a2
*/
@Override
public int compareTo(A o) {
// 兼容NP場(chǎng)景;
if(Objects.isNull(o)) return 1;
return a - o.a;
}
public static void main(String[] args) {
A a = new A();
System.out.println(a.compareTo(null));
}
}
自然排序需要類實(shí)現(xiàn) Comparable接口,同時(shí)重寫 comparaTo 方法恩溅。Comparator 則是在外部制定排序規(guī)則,然后作為排序策略參數(shù)傳遞給某些類蜒滩,比如 Collections.sort(), Arrays.sort(), 或者一些內(nèi)部有序的集合(比如 SortedSet,SortedMap 等)俯艰。
class A {
private int a;
private static final Comparator<A> comparator = (o1, o2) -> o1.a - o2.a;
public static void main(String[] args) {
A[] array = { new A(2), new A(1), new A(3)};
Arrays.sort(array, comparator);
for (A a : array) {
System.out.println(a.a);
}
}
public A(int a){
this.a = a;
}
}