使用Arrays.asList方法生成出的list在执行add方法时抛出异常,业务代码逻辑简化后如下:
Map<Integer,List<Integer>>map = new HashMap<>();
for(int i=0;i<10;i++){
if(map.containsKey(i))
map.put(i,Arrays.asList(i));
else map.get(i).add(i);
}
执行循环后add这行代码抛出异常:
java.lang.UnsupportedOperationException: null
换一种写法以后不报异常了:
Map<Integer,List<Integer>>map = new HashMap<>();
for(int i=0;i<10;i++){
if(map.containsKey(i))
map.put(i,new ArrayList<>());
map.get(i).add(i);
}
猜测可能和List的生成方式有关系,打断点发现前后的数据结构有区别,两种写法的List不太一样:
这是因为Arrays.asList()方法返回的是Arrays类的一个内部嵌套类ArrayList,这里的ArrayList和直接new出来的不一样,是不支持任何修改操作的,一旦修改就会抛出UnsupportedOperationException这一异常。