gpt4 book ai didi

java - 使用 TreeMap 时出现 ClassCastException

转载 作者:行者123 更新时间:2023-12-02 02:25:55 25 4
gpt4 key购买 nike

我有一个TreeMap<Integer, TreeMap<int[][], Integer>> jungle 。当我尝试执行语句时

TreeMap<int[][], Integer> tempMap = new TreeMap();
int[][] matrix = {{1}};
tempMap.put(matrix, 4);

最后一行给了我

java.lang.ClassCastException: [[I cannot be cast to java.base/java.lang.Comparable at java.base/java.util.TreeMap.compare

异常。我是否不允许使用 int[][]作为 treeMap 中的键?

最佳答案

TreeMap 的目的就是要有一个有序的集合

A Red-Black tree based NavigableMap implementation. The map is sorted according to the natural ordering of its keys, or by a Comparator provided at map creation time, depending on which constructor is used.

您必须传递一个处理int[][]Comparator;这是一个基于数组总和排序的示例

class Custom2DArrayComparator implements Comparator<int[][]> {

private static int sum(int[][] v) {
return Arrays.stream(v).map(arr -> Arrays.stream(arr).sum())
.mapToInt(Integer::intValue).sum();
}

@Override
public int compare(int[][] o1, int[][] o2) {
return Integer.compare(sum(o1), sum(o2));
}
}

使用

public static void main(String[] args) {
TreeMap<int[][], Integer> tempMap = new TreeMap<>(new Custom2DArrayComparator());
int[][] matrix = {{1}};
tempMap.put(matrix, 4);
}

您可以使用匿名类来避免在外部创建一个

public static void main(String[] args) {
TreeMap<int[][], Integer> tempMap = new TreeMap<>(new Comparator<>() {
@Override
public int compare(int[][] o1, int[][] o2) {
return Integer.compare(sum(o1), sum(o2));
}

int sum(int[][] v) {
return Arrays.stream(v).map(arr -> Arrays.stream(arr).sum())
.mapToInt(Integer::intValue).sum();
}
});
int[][] matrix = {{1}};
tempMap.put(matrix, 4);
}

关于java - 使用 TreeMap 时出现 ClassCastException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65640964/

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