如何创建值为ArrayList<ArrayList<Integer>>的HashMap并正确添加元素
嵌套泛型HashMap赋值解决方案
报错根因
你声明的HashMap值类型为ArrayList<ArrayList<Integer>>,是两层嵌套的整数列表结构,而你从用户侧拿到的输入是单层ArrayList<Integer>,二者类型不匹配,直接传入构造器必然触发类型不兼容报错。
正确写入方式
场景1:逐次拿到用户输入的单层列表,合并为同一个key的value
如果你的用户每次输入的是嵌套列表中的单个子列表(比如key=1对应的[1,2,5]、[4,5]分两次输入),写法如下:
// i为目标key,userInput为用户输入的单层ArrayList<Integer> // 先判断key是否存在,不存在则初始化对应的外层列表 if (!map.containsKey(i)) { map.put(i, new ArrayList<>()); } // 将用户输入的单层列表加入外层列表 map.get(i).add(userInput);
对应你给出的示例数据,写入key=1的完整示例:
import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; // 你的Map声明 HashMap<Integer,ArrayList<ArrayList<Integer>>> map = new HashMap<>(); // 模拟两次用户输入 ArrayList<Integer> userInput1 = new ArrayList<>(Arrays.asList(1,2,5)); ArrayList<Integer> userInput2 = new ArrayList<>(Arrays.asList(4,5)); int key = 1; if (!map.containsKey(key)) { map.put(key, new ArrayList<>()); } map.get(key).add(userInput1); map.get(key).add(userInput2);
场景2:一次性拿到完整的两层嵌套列表输入
如果用户侧输入本身就是ArrayList<ArrayList<Integer>>类型,直接写入即可,需要避免后续修改用户输入影响Map内的值可以做一层浅拷贝:
// userInput为用户输入的两层嵌套列表ArrayList<ArrayList<Integer>> map.put(i, new ArrayList<>(userInput));
内容的提问来源于stack exchange,提问作者user10183910
相关产品推荐
相关产品推荐

