【Java】Collection.sort以及比較器Comparator

TypantK發表於2019-03-03

偷偷記住

從大到小(2-->1)

@Override
public int compare(Integer o1, Integer o2){
    return o2.compareTo(o1);
}

 

 

不多說,先來道題8:

輸入一個正整數陣列,把陣列裡所有數字拼接起來排成一個數,列印能拼接出的所有數字中最小的一個。

  • 例如輸入陣列{3,32,321},則列印出這三個數字能排成的最小數字為321323。
import java.util.ArrayList;

public class Solution {
    public String PrintMinNumber(int [] numbers) {
        
    }
}

 


答案

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;

public class Solution {
    public String PrintMinNumber(int [] numbers) {
        int n;
        String s="";
        ArrayList<Integer> list= new ArrayList<Integer>();
        n=numbers.length;
        for(int i=0;i<n;i++){
           list.add(numbers[i]);
        }
        Collections.sort(list, new Comparator<Integer>(){
                   
                     public int compare(Integer str1,Integer str2){
                            //加""轉換成字串
                            String s1=str1+""+str2;
                            String s2=str2+""+str1;
                            return s1.compareTo(s2);
                     }
        });
  
        for(int j:list){
           s+=j;
        }
        return s;

    }
}

 

首先來看一下Comparator<T>

**這個題目中,我們要讓字串連起來之後升序排列,所以第一個引數應該小於第二個引數(返回負整數)

而String類中實現了介面Comparable(此方法中只有一個方法compareTo(String a, String b))

這個方法的實現非常簡單。首先一個一個字元判斷,如果有不相等的,就返回ASCII的差;如果都相等(也就是其中一個字元創長度大於等於另一個),就返回長度差。

相關文章