Collections.sort排序的问题,请教

superliyubo 2013-10-18 11:59:16



import java.util.Comparator;
import java.util.*;
public class SsvlistInfoCompare implements Comparator<String[]> {


/**
*
*/
public int compare(String[] a, String[] b) {
//如果a 大于b 返回 整数 1 、相等返回 0 、小于返回 -1
//按升序排列 如果要设置成降序写成b.compareTo(a);
int flag = a[0].compareTo(b[0]);
return flag;
}

public static void main(String[] strs) {
List<String[]> list = new ArrayList<String[]>();
for(int i = 0 ; i < 20 ; i++){
String[] ary = new String[1];
ary[0] = String.valueOf(i);
list.add(ary);

}

SsvlistInfoCompare s = new SsvlistInfoCompare();
//实现顺序或者倒序排列
Collections.sort(list, s);

for (int i = 0; i < list.size(); i++) {
String[] ary = list.get(i);
System.out.println(ary[0]);

}
}
}


急 谢谢
...全文
315 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
tony4geek 2013-10-18
  • 打赏
  • 举报
回复
teemai 2013-10-18
  • 打赏
  • 举报
回复
你的程序的问题是,compareTo的参数是string,比较string,是比较第一个字符,如果相同则比较第二个。所以打印出来会是: 0 10 11 12 13 . . . 2 3 4 . . .
teemai 2013-10-18
  • 打赏
  • 举报
回复
打印: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
teemai 2013-10-18
  • 打赏
  • 举报
回复

import java.util.Comparator;
import java.util.*;
public class SsvlistInfoCompare implements Comparator<String[]> {
 
 
    /**
     *
     */
    public int compare(String[] a, String[] b) {
        //如果a 大于b 返回 整数 1 、相等返回 0 、小于返回 -1
        //按升序排列 如果要设置成降序写成b.compareTo(a);
        int flag = Integer.parseInt(a[0]) - Integer.parseInt(b[0]);
        return flag;
    }
 
    public static void main(String[] strs) {
        List<String[]> list = new ArrayList<String[]>();
        for(int i = 0 ; i < 20 ; i++){
            String[] ary = new String[1];
            ary[0] = String.valueOf(i);
            list.add(ary);
 
        }
 
        SsvlistInfoCompare s = new SsvlistInfoCompare();
        //实现顺序或者倒序排列
        Collections.sort(list, s);
 
        for (int i = 0; i < list.size(); i++) {
            String[] ary = list.get(i);
            System.out.println(ary[0]);
 
        }
    }
}
soton_dolphin 2013-10-18
  • 打赏
  • 举报
回复
public int compare(String[] a, String[] b) { } 这里错了,你不能自己改参数的。要用API里面的 public int compare(Object o1, Object o2) {}
superliyubo 2013-10-18
  • 打赏
  • 举报
回复
引用 2 楼 huxiweng 的回复:

import java.util.Comparator;
import java.util.*;
public class SsvlistInfoCompare implements Comparator<String[]> {
 
 
    /**
     *
     */
    public int compare(String[] a, String[] b) {
        //如果a 大于b 返回 整数 1 、相等返回 0 、小于返回 -1
        //按升序排列 如果要设置成降序写成b.compareTo(a);
        int flag = Integer.parseInt(a[0]) - Integer.parseInt(b[0]);
        return flag;
    }
 
    public static void main(String[] strs) {
        List<String[]> list = new ArrayList<String[]>();
        for(int i = 0 ; i < 20 ; i++){
            String[] ary = new String[1];
            ary[0] = String.valueOf(i);
            list.add(ary);
 
        }
 
        SsvlistInfoCompare s = new SsvlistInfoCompare();
        //实现顺序或者倒序排列
        Collections.sort(list, s);
 
        for (int i = 0; i < list.size(); i++) {
            String[] ary = list.get(i);
            System.out.println(ary[0]);
 
        }
    }
}
多谢版主细心讲解

62,628

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧