題目描述

Arrays.sort()
Arrays.sort()中只有數組參數
int[] array = {5, 6, -1, 4};
Arrays.sort(array);
這種是默認的排序,按照字典序(ASCII)的順序進行排序。
Arrays.sort()中數組參數和排序方法
使用提供的方法
String[] str = {“abc”, “aaa”, “abc”};
Arrays.sort(str, String.CASE_INSENSITIVE_ORDER);
String中定義的忽略大小寫,完全通過字母的順序進行排序
Arrays.sort(str, Collections.reverseOrder());
反向排序
自定義排序方法
出來使用java提供的排序方法外,還可以使用自定義的排序方法,自定義排序方法需要實現java.util.Comparetor接口中的compare方法。
public int compare(String a, String b) {
// 返回正數表示要交換,正常為b+a,即大的放前
// 由小到大排序(前者減去后者)
// 由大到小排序(后者減去前者)
String r1=a+b;
String r2=b+a;
return b.compareTo(a);
}
int compare(Object obj1, Object obj2)
compare方法 返回負數時代表不交換
compare方法 返回0時代表不交換
compare方法 返回正數時代表交換
具體代碼
import java.util.Arrays;
import java.util.Comparator;
/**
* @Author: hwj
* @Date: 2020/8/19 0:33
* Desc: 給定一組非負整數,重新排列它們的順序使之組成一個最大的整數。
*/
public class MaxNumber {
public static void main(String[] args) {
int[] num={3,30,34,5,9};
System.out.println(largeNumber(num));
}
private static class LargerString implements Comparator<String> {
@Override
public int compare(String a, String b) {
// 返回正數表示要交換,正常為b+a,即大的放前
// 由小到大排序(前者減去后者)
// 由大到小排序(后者減去前者)
String r1=a+b;
String r2=b+a;
return r2.compareTo(r1);
}
}
/**
* 1. 獲取整形數組的每個值,將其轉化為String類型數組中
* 2. 數組兩兩排列進行比較,得到最好的數組排序
* 3。定義一個String類型字符串,數組拼接為字符串
*/
public static String largeNumber(int[] num){
String[] sArray=new String[num.length];
for(int i=0;i<num.length;i++){
sArray[i]=String.valueOf(num[i]);
}
Arrays.sort(sArray,new LargerString() );
if(sArray[0].equals("0")){
return "0";
}
String largeString="";
for(int i=0;i<sArray.length;i++){
largeString+=sArray[i];
}
return largeString;
}
}
