当前位置: 首页 > 知识库问答 >
问题:

在TreeMap Java中存储ArrayList作为键

蓬琦
2023-03-14

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

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");
 }

知道吗?谢谢

共有1个答案

贺飞
2023-03-14

树映射按排序顺序维护其键。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
        }
    });

或者,如果您不必按任何特定顺序维护键,则使用hashmap

 类似资料:
  • 我正在尝试使用put方法将arraylist存储在hashmap中。我在下一步中清除了列表,以便在下一次迭代中添加下一组值。一旦清除列表,地图中的值也会被清除。虽然我在清理清单之前已经把清单放在地图上了。 sysout打印{key=[]} 有人请让我清楚如何坚持hashmaphash地图。

  • 下面的代码当然不是做我需要做的事情的最佳方式,但不幸的是,我没有太多时间回去改变数据结构/存储选项等。然而,它将被清理干净。不管怎样,代码的质量不是我的问题,我跑题了。 当用户第一次注册他们的帐户时,他们会得到一个带有多项选择(复选框)的ListView。所选项目存储在SparseBooleanArray中,然后转换为ArrayList of Strings。 ListView项的名称来自名为ge

  • 问题内容: 我想将元素存储在一个列表中,每个元素具有4个参数,我试图创建一个数组列表,该列表为每个元素存储4个参数,它们是不同类型的: iD:int x位置:浮点 y位置:浮点 名称:字符串 我用: 但是当我使用时: 我得到错误: “ ArrayList类型的add(int,Object)方法不适用于参数(in,float,float)” 我不知道如何能够向ArrayList添加不同类型,有没有办

  • 有点初学者的问题但是... 我有一个从数据库返回的ResultSet对象-3列30行。 我检索以下数据集: null 我知道这应该不难,我只是在努力寻找迭代HashMaps的ArrayList的最佳方法

  • 问题内容: 我正在阅读Java的ArrayList的源代码,并且遇到了它的支持数组声明: 为什么这需要是瞬态的?为什么不能对此类进行序列化? 谢谢您的帮助! 问题答案: 它 可以 被序列化; 该班只是需要照顾的事情本身,而不是使用默认的机制。查看该类中的和方法,它们是标准序列化机制的一部分。 如果您查看源代码,则会看到它不保存后备阵列。相反,它一次将元素(包括空值)序列化到最大限制。这避免了序列化

  • 问题内容: 在Objective-C中,您可以定义块的输入和输出,存储传递给方法的那些块之一,然后在以后使用该块: 因此,我试图在Swift中做到等效: 编译器不喜欢completionHandler的声明。不是我要怪它,而是如何定义一个可以在以后在Swift中设置和使用的闭包? 问题答案: 编译器抱怨 因为右侧不是适当签名的闭包,即采用float参数的闭包。以下将为完成处理程序分配“不做任何事情