對n以內的數字進行字典序排序(java)
阿新 • • 發佈:2019-02-01
刷題時,遇到的問題,目前是想到了兩種方式:一種是重寫比較器;另一種是使用字串的表達方式,然後進行自然排序。
下面給出例子。
1、改寫比較器方式
輸入:15package schooloffer17; import java.util.*; /** * @Author: cxh * @CreateTime: 17/11/21 15:28 * @ProjectName: JavaBaseTest * <字典排序></> */ public class DictionaryOrder { public static void main(String[] args) { int n,m; Scanner scanner=new Scanner(System.in); while (scanner.hasNextInt()){ n=scanner.nextInt();//n個數字排序 ArrayList<Integer> list=new ArrayList<Integer>(); for(int i=0;i<n;i++) list.add(i+1); Collections.sort(list, new Comparator<Integer>() { @Override public int compare(Integer o1, Integer o2) { String str1=String.valueOf(o1); String str2=String.valueOf(o2); if(str1.length()==str2.length()){ return (int)(o1-o2);//長度相同,升序 }else{ for(int i=0;i<Math.min(str1.length(),str2.length());i++){ if(str1.charAt(i)!=str2.charAt(i)){ return str1.charAt(i)-str2.charAt(i); } } return str1.length()-str2.length(); } } }); //輸出list Iterator<Integer> iterator=list.iterator(); while (iterator.hasNext()){ System.out.println(iterator.next()+","); } } } }
輸出結果:
1,
10,
11,
12,
13,
14,
15,
2,
3,
4,
5,
6,
7,
8,
9,
2、自然排序方式
package schooloffer17; import java.util.*; /** * @Author: cxh * @CreateTime: 17/11/21 15:28 * @ProjectName: JavaBaseTest * <字典排序></> */ public class DictionaryOrder { public static void main(String[] args) { int n,m; Scanner scanner=new Scanner(System.in); while (scanner.hasNextInt()){ n=scanner.nextInt();//n個數字排序 ArrayList<String> list=new ArrayList<String>(); for(int i=0;i<n;i++) list.add(String.valueOf(i+1)); Collections.sort(list); //輸出list Iterator<String> iterator=list.iterator(); while (iterator.hasNext()){ System.out.println(iterator.next()+","); } } } }
輸入:15
輸出結果:
1,
10,
11,
12,
13,
14,
15,
2,
3,
4,
5,
6,
7,
8,
9,
3、其實改寫比較器是常寫的,自己比較熟悉,這次是對String型別的集合進行自然排序的第一次使用,原來String型別的集合自然排序是字典排序形式,這可能以後在刷題時候可以用到的一個方式呢。同時測試了陣列型別為String,自然排序也是字典排序。只是寫法兩個不同而已,陣列就是Arrays.sort(),而list集合是Collections.sort()。