【发布时间】:2019-09-29 00:39:40
【问题描述】:
我正在从 stackoverflow 上的示例/问题中学习 Java 8,同时解决一些算法问题。我有疑问:当使用 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());
另一个地图的例子,我在地图trackW上执行了一些我没有复制到这里的操作。
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()));
另外,如果有人可以修复/建议以这种方式对 hashmap 进行排序的更好选择(基于值升序,然后基于键降序),我将非常高兴。
问候。
【问题讨论】:
-
你可以阅读the source code yourself;此外,您通常可以假设 OpenJDK 质量的系统的开发人员会采取明显改进的方法,而不是做一些效率过低的事情。
-
谢谢。我会看看代码。是的,这是我的假设,但只是想确认一下。
标签: java sorting lambda java-8