Arrays.asList的坑
(1)坑
对于通过Arrays.asList获取的list,不能改变其结构,否则会报错
java.lang.UnsupportedOperationException异常
(2)原因分析
查看源码可知,asList方法中的ArrayList是Arrays类的内部类,它虽然继承了AbstractList类,重写了很多方法,比如我们上面使用的contains方法,但是却没有重写add方法,所以我们在调用add方法时才会抛出java.lang.UnsupportedOperationException异常。
(3)总结
Arrays.asList方法只可以在一些简单的场合使用,比如快速声明一个集合,不对其结构进行修改,只是进行查询使用。
ArrayList的subList的坑
(1)注意事项
修改原集合元素的值,会影响子集合
修改原集合的结构,会引起ConcurrentModificationException异常
修改子集合元素的值,会影响原集合
修改子集合的结构,会影响原集合
(2)原因分析
SubList类是ArrayList的内部类,该构造函数中也并没有重新创建一个新的ArrayList,所以修改原集合或者子集合的元素的值,是会相互影响的。