Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sorting java7中的Collections.sort()问题_Sorting_Collections_Java 7 - Fatal编程技术网

Sorting java7中的Collections.sort()问题

Sorting java7中的Collections.sort()问题,sorting,collections,java-7,Sorting,Collections,Java 7,java7是否存在排序问题?我正在使用Collections.sort(列表、比较器) 当我切换到java7时,我注意到排序结果与使用java6时的结果不同 示例:List=[d,e,b,a,c,f,g,h] 在java6集合中,sort(List,comparator)产生[a,b,c,d,e,f,g,h] 在java7集合中,sort(List,comparator)产生[b,a,c,d,e,f,g,h] 列表中的前两个值已交换。Java 7已从切换到。它可能会导致“断开的比较器”的顺序发生

java7是否存在排序问题?我正在使用Collections.sort(列表、比较器)

当我切换到java7时,我注意到排序结果与使用java6时的结果不同

示例:List=[d,e,b,a,c,f,g,h]

在java6集合中,sort(List,comparator)产生[a,b,c,d,e,f,g,h]

在java7集合中,sort(List,comparator)产生[b,a,c,d,e,f,g,h]

列表中的前两个值已交换。

Java 7已从切换到。它可能会导致“断开的比较器”的顺序发生轻微变化(引用源代码中的注释):

尝试使用以下工具运行JVM:

java -Djava.util.Arrays.useLegacyMergeSort=true

目前还不清楚“断开的比较器”是什么意思,但显然它会导致排序数组中元素的顺序不同。

需要注意的一点是,这可能会导致混淆。Collections.sort是一种稳定的排序。这意味着对于相等的元素,它保持其原始顺序,因此:

如果a==b,那么

Collections.sort([d, e, b, a, c, f, g, h]) = [b, a, c, d, e, f, g, h]


在我看来,这可能是您看到的,或者所讨论的比较器(或被排序的对象的自然排序)没有按您预期的方式工作。

向oracle报告一个错误。Collections.sort似乎不太可能被破坏。您观察到这个结果的实际数据是什么(如图所示的字符或字符串数组)?你是在给它传递一个比较器吗?如果你能展示一个有这个结果的示例代码,最好看看问题出在哪里展示比较器的代码
Collections.sort([d, e, b, a, c, f, g, h]) = [b, a, c, d, e, f, g, h]
Collections.sort([d, e, a, b, c, f, g, h]) = [a, b, c, d, e, f, g, h]