比较中的变量是否会有所不同?

时间:2017-01-16 01:24:23

标签: java compareto

给出一个非负整数列表,我想安排它们,使它们形成最大的数字。给定[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());

2 个答案:

答案 0 :(得分:2)

使用反向(降序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是下一个数字,依此类推。

答案 1 :(得分:0)

是。 compareTo方法中的顺序会有所不同。对string使用compareTo方法时,它会比较字符串中每个字符的Unicode值,并返回字符串中两个字符值的差值。 例如,

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

将返回“d” - “c”

的差异
Output : 1

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

会给出'c' - 'd'

的区别
Output : -1

总的来说,顺序很重要,因为它以某种方式返回差异,即:

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