在对集合或任何数据集进行排序时,反向排序在Java8中是如何工作的?

在对集合或任何数据集进行排序时,反向排序在Java8中是如何工作的?,java,sorting,lambda,java-8,Java,Sorting,Lambda,Java 8,我正在通过stackoverflow的示例/问题学习Java8,同时解决一些算法问题。我有一个疑问:当使用Comparator.reverseOrder()或reversed()时,JVM是否理解我需要反向顺序,因此它以这样一种方式应用逻辑,即在对自身进行排序时,顺序是以降序方式保持的。或者JVM再进行一次传递(O(n))以将升序数据结构更改为降序数据结构 int[][] arr= new int[][]{{1,4},{3,5}}; Arrays.sort(arr, Comparator.<

我正在通过stackoverflow的示例/问题学习Java8,同时解决一些算法问题。我有一个疑问:当使用Comparator.reverseOrder()或reversed()时,JVM是否理解我需要反向顺序,因此它以这样一种方式应用逻辑,即在对自身进行排序时,顺序是以降序方式保持的。或者JVM再进行一次传递(O(n))以将升序数据结构更改为降序数据结构

int[][] arr= new int[][]{{1,4},{3,5}};
Arrays.sort(arr, Comparator.<int[]>comparingInt(a -> a[0]).reversed());
int[][]arr=新的int[][{{1,4},{3,5};
Arrays.sort(arr,Comparator.comparingInt(a->a[0]).reversed());
另一个关于地图的例子是,我在地图轨迹W上执行一些操作,我在这里没有复制这些操作

Map<String,Integer> hmsort= new LinkedHashMap<>();
Map<String,Integer> trackW = new HashMap<>();

trackW.entrySet()
            .stream()
            .sorted(Map.Entry.<String,Integer>comparingByValue().
                    thenComparing(Map.Entry.comparingByKey(Comparator.reverseOrder())))
            .forEachOrdered(x->hmsort.put(x.getKey(),x.getValue()));
Map hmsort=newlinkedhashmap();
Map trackW=新的HashMap();
trackW.entrySet()
.stream()
.sorted(Map.Entry.comparingByValue()。
然后比较(Map.Entry.comparingByKey(Comparator.reverseOrder()))
.forEachOrdered(x->hmsort.put(x.getKey(),x.getValue());
另外,如果有人能以这种方式(根据值升序,然后根据键降序)修复/建议更好的hashmap排序选项,我将非常高兴

问候

当使用Comparator.reverseOrder()或reversed()时,JVM是否理解我需要反向顺序,因此它以这样一种方式应用逻辑,即在对自身进行排序时,顺序以降序方式保持

对。比较器本身是反向的。首先排序然后反转的不是集合


调用代码(更不用说“JVM”)看不到比较器内部的“逻辑”,排序算法只调用比较器(一次调用两个值)并查看结果。因此,调用代码(如
Arrays.sort
)无法理解比较器是“正常”还是反向版本;此外,您通常可以假定,具有OpenJDK质量的系统的开发人员将采取明显的改进方法,而不是做一些效率太低的事情。谢谢。我将看一看代码。是的,这是我的假设,但我只是想确认一下。