【发布时间】:2016-06-20 17:54:20
【问题描述】:
取自 Joshua Bloch 和 Neal Gafter 的 Java Puzzlers
import java.util.*;
public class BananaBread {
public static void main(String[] args) {
Integer[] array = { 3, 1, 4, 1, 5, 9 };
Arrays.sort(array, new Comparator<Integer>() {
public int compare(Integer i1, Integer i2) {
return i1 < i2 ? -1 : (i2 > i1 ? 1 : 0);
}
});
System.out.println(Arrays.toString(array));
}
}
预期的行为是未定义的,文本说它返回 [3, 1, 4, 1, 5, 9]。直到 Java 版本 1.7 都是如此。但是,在 Java v. 1.8 中,输出是排序列表。
我可以看到 Timsort 是 Java 1.8 中的新功能,但我不确定该算法如何与上面给出的不一致比较器一起工作。任何有关如何实现的帮助或见解将不胜感激。
【问题讨论】:
-
自动装箱问题?我宁愿使用来自
Integer的compareTo。 -
与本题中的代码相同:stackoverflow.com/questions/8900871/…。但不包括新的 Java 8 排序。
-
i1 i1.... 嗯....... ;-) 我不认为“未定义”意味着“Java 必须对每个版本都做同样的事情Java 的。”
-
以下三个给出的答案与上例完全相同:return i1 i1 ? 0 : 1); _____ 返回 i1
-
没有来源或任何东西,所以我不会发布答案,但这可能是因为幸运地正确的数组和实现细节的组合意味着报告 > as == 无关紧要。您使用的是哪个版本的 Java? (比如,你从哪里下载的?)
标签: java arrays sorting timsort