对n以内的数字进行字典序排序(java)

来源:互联网 发布:sql去掉重复字段 编辑:程序博客网 时间:2024/06/09 19:31

刷题时,遇到的问题,目前是想到了两种方式:一种是重写比较器;另一种是使用字符串的表达方式,然后进行自然排序。

下面给出例子。


1、改写比较器方式

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<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()+",");            }        }    }}
输入:15
输出结果:

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()。