ArrayList & Arrays.ArrayList 的区别与踩坑

概述

在日常coding中,我们经常会用到List类型的对象;
在初始化List时,Arrays.ArrayList可以直接带参构造,可以省一行代码,不过不清楚源码或特性也会造成一些异常情况;

区别

初始化

public static void main(String[] args) {
    // java.util.ArrayList
    List list1 = new ArrayList<>();
    list1.add("1");

    // java.util.Arrays.ArrayList
    List list2 = Arrays.asList("1");
}

在上述情况中,乍看2个list是一样的,实际则略有不同

当调用list2.add("2")时,系统就会报错
Exception in thread "main" java.lang.UnsupportedOperationException

其原因是Arrays.ArrayList并没有实现AbstractList中的add方法;
同样,Arrays.ArrayList也没有实现AbstractList中的remove方法;
也可以认为,用Arrays.ArrayList初始化出来的对象,是一个定长的集合,并不支持添加元素;

所以在实际使用这2个类时,需要注意使用场景,若下游需要对该集合进行新增删减,就不能使用Arrays.ArrayList;
Arrays.ArrayList初始化List后,调用这个对象的add和remove方法并不会编译报错,只有在程序运行时才能发现问题,这里需要特别注意

你可能感兴趣的:(java)