目录
题目描述
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;
}
}