将ArrayList <Integer>存储为TreeMap Java中的键

Wea*_*nds 0 java arraylist map treemap

我在一个TreeMap中存储了一个arrayList作为我的键,但是我得到了这个异常

java.lang.ClassCastException:java.util.ArrayList无法强制转换为java.lang.Comparable

我将数组的内容复制到ArrayList并尝试将该arrayList存储为Map My Code中的我的键:

TreeMap< ArrayList<Integer> , Integer > bandsMap = new TreeMap< ArrayList<Integer> , Integer >(); 
ArrayList< Integer > erfcn = new ArrayList< Integer >();

for (int index = 0; index < frequencies.length; index++)   
    erfcn.add(frequencies[index]);

    bandsMap.put( erfcn , band_number);

 for (Integer value : bandsMap.values()) {
    System.out.println("Value = " + value + "\n");
 }
Run Code Online (Sandbox Code Playgroud)

任何的想法 ?谢谢

Jon*_*oni 6

树映射按排序顺序维护其键.在ArrayList类没有定义任何的排序,所以它不能被用来作为直接的关键.您可以提供外部比较器来强制执行订单,但您必须定义对您有意义的订购:

TreeMap<ArrayList<Integer>, Integer> bandsMap = new TreeMap<>(
    new Comparator<ArrayList<Integer>>() {
        public int compare(ArrayList<Integer> lst1, ArrayList<Integer> lst2) {
            // return 1 if lst1 > lst2, 0 if equal, -1 if lst1 < lst2
        }
    });
Run Code Online (Sandbox Code Playgroud)

或者,如果您不必按任何特定顺序维护密钥,请使用HashMap替代密钥.