[Java]關於Arrays.sort()

Posted by John on 2016-10-12
Words 515 and Reading Time 2 Minutes
Viewed Times

最近練習寫Java的時候遇到一個問題:請實作降冪排序。

透過查詢文件知道了Java有著Arrays.sort()這個類似於C/C++ sort()的排序function。

在C/C++的sort(需include )如果要自定義判斷式可以像下面這樣寫:

bool cmp(int a,int b)
{
return a < b;
}

然後在main裡面這樣寫

int arr[5] = {1,3,5,6,2};
sort(arr,cmp);

那在Java呢?Arrays.sort()是預設升冪排序的,我們當然也可以自定義一個判斷式,不過Java提供了另一種選擇,也就是我們可以用Collection.reverseOrder這個Java提供的Comparator來快速達成我們的需求。

一段降冪排序的Code範例如下:

Integer[] arr = {1,3,5,6,4};
System.out.println("before sorting: ");
for(int temp:arr) {
System.out.print(temp + " ");
}
Arrays.sort(arr,Collections.reverseOrder());
System.out.println("");
System.out.println("after sorting: ");
for(int temp:arr) {
System.out.print(temp + " ");
}

第一次進行這個練習的時候是編譯錯誤的,上網Google發現陣列必須是Integer[]而不能是int[]

於是來探討一下這兩者有什麼差別?上網整理完後大約是這樣

  1. Integer[]是物件,int[]是原生型別(不是物件)
  2. 可以想成Integer是將int以及一些資訊包裝過後的類別
  3. Integer的初始值是Null,int的初始值是0
  4. 在JDK1.5提供了簡潔的轉換方法:自動拆箱(autoboxing)、自動封箱(unboxing)
  5. 在某些情況(Arraylist、Hashmap、以及上面這個範例)是無法使用int的,因為傳入的必須是一個物件

所以在寫sort的時候必須宣告成Integer的型態!! 現在知道如何做降冪排序了,那如果要自定義Comparator呢?在Java中需要透過implement來override

class Cmp implements Comparator{
@Override
public int compare(T temp1, T temp2) {
return temp1 – temp2;
}
}

這樣自定義好後就可以將Sort()改成這樣子 Arrays.sort(arr, new Cmp());

以上,排序完成!!

參考網址:

  1. http://www.cnblogs.com/shenliang123/archive/2011/10/27/2226903.html
  2. https://read01.com/2zNy7L.html
  3. https://www.javaworld.com.tw/jute/post/view?bid=29&id=308357

>