本帖最后由 陈淑飞 于 2012-7-14 18:23 编辑
王亚男 发表于 2012-7-6 22:14
您发错版块儿了。。
这个题我用了TreeSet,用比较器还是很方便的。结果为:[A, a, F, f, g, h, K] ...
其实,这里用TreeSet 集合 在某些情况 下是不合适的。
因为 Set 集合家族,决定了,元素必须是唯一,不能重复。
当我要排序 [F,a,f,h,A,g,K,A]时,用上面的方法就少掉了一个元素了。
这个题目,一开始看到时。有两种思路:
一种是想起了
Arrays.sort(xx) 方法,但是似乎用sort 解决不了大写与小写排序放在一起,大写放前面。
另一种是,自己写双for 循环,用选择或冒泡排序法来搞定。
但效率似乎有点低了。
但一想想,不对既然sun ,提供了Arrays.sort(xx)方法,应该会提供另一个方法,让开发者来决定采用哪种比较来排序数组元素啊。
带着疑问,查看API文档, 呵呵, 果然不出所料。
static <T> void sort(T[] a, Comparator<? super T> c)
根据指定比较器产生的顺序对指定对象数组进行排序。
用了,这个方法,这个题目还不是小菜一碟了。呵呵。
下面给出,两种思想的具体代码:
- import java.util.*;
- public class SortDemo
- {
- public static void main(String[] args)
- {
- String[] str1 = {"F","a","f","h","A","g","K","A"};
- System.out.println("------------采用Arrays.sort(xx,Comparator<T>)排序-------");
- sort1(str1);
- printArr(str1);
-
- System.out.println();
- String[] str2 = {"F","a","f","h","A","g","K","A"};
- System.out.println("------------采用笨拙的选择排序-------");
- sort1(str2);
- printArr(str2);
-
- }
- public static void sort1(String[] str){
- Arrays.sort(str,new Comparator<String>(){
- public int compare(String str1,String str2){
- int num = str1.toUpperCase().compareTo(str2.toUpperCase());
- if(0==num)
- num = str1.compareTo(str2);
- return num ;
- }
-
- });
- }
- public static void sort2(String[] str){
-
- for(int i=0;i<str.length-1;i++){
- for(int j=i+1;j<str.length;j++){
- if(str[i].toUpperCase().compareTo(str[j].toUpperCase())>0 ){
- sawp(i,j,str);
- }else if(str[i].toUpperCase().compareTo(str[j].toUpperCase())==0 ){
- if(str[i].compareTo(str[j])>0 )
- sawp(i,j,str);
- }
- }
- }
- }
- private static void sawp(int i, int j, String[] str){
- String temp = str[i];
- str[i] = str[j];
- str[j] = str[i];
- }
- private static void printArr(String[] str){
- int i =0 ;
- for(String s:str){
- if(i>0)
- System.out.print(",");
- System.out.print(s);
- i++;
- }
- }
-
- }
复制代码 看来,API中方法还是很强大的,通常我们不可能知道所有API中的方法。
个人觉得,学习时也没有必要背下API中的所有方法,主要还是有需求用到的时候,带的疑问来查API中的方法。
这样,下次遇到同样的问题,还不是手到擒来。
忘记上真理图了,呵呵。
|