compareTo 中的变量顺序会有所不同吗?

Will the variables order in compareTo make difference?

给定一个非负整数列表,我想将它们排列成最大的数。给定 [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,即默认[=22]中数字按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是下一个,依此类推。

是的。 compareTo 方法中的顺序会有所不同。当您对字符串使用 compareTo 方法时,它会比较字符串中每个字符的 Unicode 值和 return 字符串中两个字符值的差异。 例如,

System.out.println("abdc".compareTo("abcd"));

将return与'd'-'c'

的区别
Output : 1

并且

System.out.println("abcd".compareTo("abdc"));

将给出 'c'-'d'

的差异
Output : -1

总的来说,顺序很重要,因为它 return 在某种程度上存在差异,即:

thisString.charAt(index) - argumentString.charAt(index);