最近練習寫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}; |
那在Java呢?Arrays.sort()是預設升冪排序的,我們當然也可以自定義一個判斷式,不過Java提供了另一種選擇,也就是我們可以用Collection.reverseOrder這個Java提供的Comparator來快速達成我們的需求。
一段降冪排序的Code範例如下:
Integer[] arr = {1,3,5,6,4}; |
第一次進行這個練習的時候是編譯錯誤的,上網Google發現陣列必須是Integer[]而不能是int[]
於是來探討一下這兩者有什麼差別?上網整理完後大約是這樣
- Integer[]是物件,int[]是原生型別(不是物件)
- 可以想成Integer是將int以及一些資訊包裝過後的類別
- Integer的初始值是Null,int的初始值是0
- 在JDK1.5提供了簡潔的轉換方法:自動拆箱(autoboxing)、自動封箱(unboxing)
- 在某些情況(Arraylist、Hashmap、以及上面這個範例)是無法使用int的,因為傳入的必須是一個物件
所以在寫sort的時候必須宣告成Integer的型態!! 現在知道如何做降冪排序了,那如果要自定義Comparator呢?在Java中需要透過implement來overrideclass Cmp implements Comparator{
public int compare(T temp1, T temp2) {
return temp1 – temp2;
}
}
這樣自定義好後就可以將Sort()改成這樣子 Arrays.sort(arr, new Cmp());
以上,排序完成!!
參考網址:
- http://www.cnblogs.com/shenliang123/archive/2011/10/27/2226903.html
- https://read01.com/2zNy7L.html
- https://www.javaworld.com.tw/jute/post/view?bid=29&id=308357