ArrayList的asList()方法
- Arrays.asList()方法,本质是调用了Arrays的一个静态内部类,实现了AbstractList接口,这个方法是重写了AbstractList的方法,但是这个asList()大小是固定的,当我们使用add方法时会调用父类AbstractList的add方法,通过代码可以看出,该实现逻辑是直接抛异常
public void add(int index, E element) {
throw new UnsupportedOperationException();
}
- ArrayList的subList()获得的子集合存在以下特点
- subList,获取原集合可以通过索引获取,原则是:左开右闭
List<String> firstList= new ArrayList<>();
firstList.add("1111");
firstList.add("22");
firstList.add("333");
firstList.add("44");
firstList.add("55");
List<String> secondList= bookList.subList(3, 5);
- 修改原集合,会影响到子集合
- 修改原集合结构,会引起ConcurrentModificationException异常-- 即:你给原集合添加一个元素,然后遍历子集合会导致异常
- 修改子集合元素的值,会影响原集合
- 修改子集合的结构,会影响原集合
在subList场景中,对父集合元素的增加或删除,均会导致子列表的遍历、修改、删除产生ConcurrentModificationException异常
- 总结:ArrayList的subList方法,返回的是ArrayList的一个视图,修改父集合会导致子集合修改。修改子集合会导致父集合修改。添加父集合元素会导致子集合报异常。
- Arrays的asList()方法。返回的是一个固定大小的ArrayList,添加元素会报异常