当键是数组时对Map键进行排序

Vic*_*Vic 3 java arrays dictionary

我有一个HashMap<Float[], Integer>,我可能需要将其转换为TreeMap.如何对TreeMap的键(即数组)进行排序?他们的第一个元素?

我打算运行一个简单的测试,但它以某种方式导致错误:

public class treeMapTest {
    public static void main(String[] args) {
        Integer arr1[] = {9, 0, 3};
        Integer arr2[] = {2, 2, 2};
        Integer arr3[] = {4, 2, 1};

        TreeMap<Integer[], Integer> tm = new TreeMap<Integer[], Integer>();
        tm.put(arr1, 7);
        tm.put(arr2, 7);
        tm.put(arr3, 7);

        System.out.println(tm);
    }
}
Run Code Online (Sandbox Code Playgroud)

谢谢.

Era*_*ran 5

数组没有自然排序(即它们不实现Comparable接口),这就是为什么在TreeMap使用无参数构造函数实例化时代码会引发异常的原因.

您必须提供Comparator<Integer[]>TreeMap,以定义自己的排序构造.

BTW,使用数组作为一个键HashMap是一个坏主意(因为数组不覆盖的默认实现equals()hashCode()),所以这是你切换到一个好东西TreeMap.

  • 对.否则你将在线程"main"java.lang.ClassCastException中获得`Exception:[Ljava.lang.Integer; 无法强制转换为java.lang.Comparable` (2认同)