gpt4 book ai didi

java - TreeMap 初始化并按值排序

转载 作者:行者123 更新时间:2023-12-01 17:56:51 25 4
gpt4 key购买 nike

我必须制作键为 int[] 且值为 double 的排序映射。它不能交换,因为 double 会重复。此外, map 将按值排序,最后 x 值将被删除。

我尝试过

Map<int[],Double> map = new TreeMap<>();;
int[] i = {0,1,1,0};
map.put(i,8.5); // ERROR HERE Organisms.java:46
i = new int[]{0,0,0,0};
map.put(i,30.0);
System.out.println("sorted" + sortByValue(map));

Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: [I cannot be cast to java.lang.Comparable at java.util.TreeMap.compare(TreeMap.java:1294) at java.util.TreeMap.put(TreeMap.java:538) at com.pszt_organism.Organisms.test(Organisms.java:46) <-- MARKED ERROR

我找到了方法sortByValue(Map<K, V> map)在本主题中:java8 example by Carter Page

我认为 TreeMap 对 int 排序表有问题。怎么解决?

编辑:

private  <K, V extends Comparable<? super V>> Map<K, V> sortByValue(Map<K, V> map) {
return map.entrySet()
.stream()
.sorted(Map.Entry.comparingByValue(/*Collections.reverseOrder()*/))
.collect(Collectors.toMap(
Map.Entry::getKey,
Map.Entry::getValue,
(e1, e2) -> e1,
LinkedHashMap::new
));
}

最佳答案

问题是 Java 数组类型没有实现 Comparable

解决方案:实现一个 Comparator 来比较您的 int[] 键,并将实例作为参数传递给 TreeMap 构造函数.

但是,只有当 int[] 对象用作键时未发生突变时,这才有效。如果您改变它们,那么您将“破坏”TreeMapMap 操作将表现不正确。

您还可以将 int[] 对象包装在实现 Comparable、实现 compareToequals 的类中> 和hashCode。关于突变的相同警告也适用于这种方法。

关于java - TreeMap<int[],Double> 初始化并按值排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44113596/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com