转自:http://www.oschina.net/question/1255760_126893
有稍微修改
1.7代码如下:
- public static void sort(Object[] a) {
- if (LegacyMergeSort.userRequested)
- legacyMergeSort(a);
- else
- ComparableTimSort.sort(a);
- }
- /** To be removed in a future release. */
- private static void legacyMergeSort(Object[] a) {
- Object[] aux = a.clone();
- mergeSort(aux, a, 0, a.length, 0);
- }
1.6 or 1.5代码如下:
- public static void sort(Object[] a) {
- Object[] aux = (Object[])a.clone();
- mergeSort(aux, a, 0, a.length, 0);
- }
网上说设置
System.setProperty("java.util.Arrays.useLegacyMergeSort", "true");
使用老的排序方法,但是遇到加载问题。
static final class LegacyMergeSort {
//这里最终取的是system.getproperty("java.util.Arrays.useLegacyMergeSort");
static final class LegacyMergeSort {
private static final boolean userRequested =
java.security.AccessController.doPrivileged(
new sun.security.action.GetBooleanAction(
"java.util.Arrays.useLegacyMergeSort")).booleanValue();
}由于是静态类,虚拟机一开始就加载了,后面程序再进行设置已经无效了,请问有什么好的解决方法吗?
(代码在产品中实现,希望不要增加安装步骤)
- ==========================================================================================原来是JDK1.7比1.6严谨,之前comprae方法返回值为1或者0,1实质是大于,0实质是等于,JDK1.7方法修改了。 不能这么返回了,于是改为 reture a-b;