刷题时,遇到的问题,目前是想到了两种方式:一种是重写比较器;另外一种是使用字符串的表达方式,而后进行天然排序。java
下面给出例子。数组
一、改写比较器方式ide
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,
二、天然排序方式测试
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()+","); } } } }
输出结果:spa
1, 10, 11, 12, 13, 14, 15, 2, 3, 4, 5, 6, 7, 8, 9,
三、其实改写比较器是常写的,本身比较熟悉,此次是对String类型的集合进行天然排序的第一次使用,原来String类型的集合天然排序是字典排序形式,这可能之后在刷题时候能够用到的一个方式呢。同时测试了数组类型为String,天然排序也是字典排序。只是写法两个不一样而已,数组就是Arrays.sort(),而list集合是Collections.sort()。code