给定一个非负整数列表,我想对它们进行排列,使它们形成最大的数字。给定[1,20,23,4,8],最大的形式数是8423201。但是我想弄清楚compareTo方法中变量的顺序如何影响Arrays.sort的结果。例如(s2 + s1).compareTo(s1 + s2)和(s1 + s2).compareTo(s2 + s1)有什么区别?

enter code here

private static class NumbersComparator implements Comparator<String> {
        @Override
        public int compare(String s1, String s2){
            return (s2 + s1).compareTo(s1 + s2);
        }
    }
String strs = {"1", "20", "23", "4", "8"};
Arrays.sort(strs, new NumbersComparator());

最佳答案

用反向(降序)lexicographical order对数字进行排序,也就是说,数字以默认的反向顺序用String(s)进行排序。喜欢,

String[] strs = { "1", "20", "23", "4", "8" };
Stream.of(strs).sorted(Comparator.reverseOrder()) // <-- sort in reverse order
    .forEachOrdered(System.out::print);
System.out.println();


哪个输出

8423201


因为8大于所有其他数字的第一位,所以4是第二位,依此类推。

关于java - 变量在compareTo中的顺序是否会有所不同?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41668251/

10-13 22:35