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