Sorting java7中的Collections.sort()问题
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: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已从切换到。它可能会导致“断开的比较器”的顺序发生
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]