JAVA-ArrayList的相关坑

2024-01-01 06:44:09

ArrayList的asList()方法

  1. Arrays.asList()方法,本质是调用了Arrays的一个静态内部类,实现了AbstractList接口,这个方法是重写了AbstractList的方法,但是这个asList()大小是固定的,当我们使用add方法时会调用父类AbstractList的add方法,通过代码可以看出,该实现逻辑是直接抛异常
public void add(int index, E element) {
    throw new UnsupportedOperationException();
}
  1. 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异常

  1. 总结:ArrayList的subList方法,返回的是ArrayList的一个视图,修改父集合会导致子集合修改。修改子集合会导致父集合修改。添加父集合元素会导致子集合报异常。
  2. Arrays的asList()方法。返回的是一个固定大小的ArrayList,添加元素会报异常

文章来源:https://blog.csdn.net/qq_33322074/article/details/135321056
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。