Java 比较器<;字符串>;返回适当的值,但ArrayList未排序

Java 比较器<;字符串>;返回适当的值,但ArrayList未排序,java,sorting,arraylist,Java,Sorting,Arraylist,我试图使用一个在Collections.sort()方法中调用的自定义比较器对字符串的ArrayList进行排序。 代码是 public static String largestNumber(final List<Integer> a) { ArrayList<String> list = new ArrayList<String>(); for(int i=0; i<a.size(); i++) { list.add(

我试图使用一个在Collections.sort()方法中调用的自定义比较器对字符串的ArrayList进行排序。 代码是

public static String largestNumber(final List<Integer> a) {
    ArrayList<String> list = new ArrayList<String>();
    for(int i=0; i<a.size(); i++) {
        list.add(String.valueOf(a.get(i)));
    }

    Comparator<String> c = new Comparator<String>() {
        public int compare(String s1, String s2) {
            System.out.println("comparing: "+(s1+s2)+
            " and "+(s2+s1));
            System.out.println((s1+s2).compareTo(s2+s1));
            return (s1+s2).compareTo(s2+s1);
        }
    };

    for(int i=0; i<a.size(); i++) {
        Collections.sort(list, c);
        System.out.println("sorted:");
        for(int j=0; j<a.size(); j++) {
            System.out.print(list.get(j));
        }
        System.out.println();
    }

    StringBuffer sb = new StringBuffer();
    for(int i=0; i<list.size(); i++) {
        sb.append(list.get(i));
    }
    return sb.toString();
}
公共静态字符串最大编号(最终列表a){
ArrayList=新建ArrayList();

对于(int i=0;i找出了问题所在。我需要返回(s2+s1)。比较到(s1+s2);

如果要比较数字,只需将它们解析为
整数,然后减去它们。
集合将完成剩余的工作

Comparator接口只是一个契约,它声明要比较的两个元素,如果a的值小于B(AB)的值,那么a首先出现。如果a的值等于B的值(a==B),那么
集合
实现很可能会将它们任意放在一起

您只需执行以下操作:

比较器c=新比较器(){ 公共整数比较(字符串s1、字符串s2){ System.out.println(“比较:+s1+ “和”+s2); //避免下面的检查,它会创建无限递归。 //系统输出打印LN(s1.与(s2)比较); //因为字符串是数字,所以可以这样做。 int a=Integer.parseInt(s1);//自动取消装箱; int b=Integer.parseInt(s2);//自动取消装箱; 返回a-b; } };
另外,避免比较递归,它会创建无限递归,从而导致
StackOverFlowException
异常

我希望我帮了忙


祝你有愉快的一天。:)

别担心你的需要有太多的循环…当我运行你的代码时,列表是按顺序排列的。还有,为什么要使用“(s1+s2).compareTo(s2+s1)”VS=>s1.compareTo(s2)?