关于Arrays.asList方法为啥不能添加探究
一.背景
今天吃完晚饭回来后看见同事在讨论为啥,调用Arrays.asList返回的集合,执行添加或修改操作会抛出异常呢,然后展开了一顿研究。
二.过程
1.示例
public static void main(String[] args) {
String temp="ddd,dfaa";
List<String> list = Arrays.asList(temp.split(","));
list.add("ddd");
System.out.println(list);
}
Exception in thread "main" java.lang.UnsupportedOperationException
at java.util.AbstractList.add(AbstractList.java:148)
at java.util.AbstractList.add(AbstractList.java:108)
at com.ljm.test.BooleanTest.main(BooleanTest.java:18)
由上面例子可以看出当我们执行添加操作时其实是会抛出异常的,为啥会抛出异常呢,看下面源码
public void add(int index, E element) {
throw new UnsupportedOperationException();
}
2.为什么要这么做,以及不让修改的好处是什么?
其实想一下,我们都知道此处的ArrayList并非java.util包下的ArrayList,而是Arrays类中的一个静态内部类,仅仅是提供数组到集合的转换,至于为什么要转换成集合这一点就不用多说了吧,操作集合本身相对于操作数组的方式来说是更加简便的,但是传统的集合相对于数组来说存在扩容,而数组一旦确定了大小就不能变。
三.总结
个人感觉,在Arrays中创建一个静态内部类的好处是既能兼容数组一旦确定长度就不可变的特性并封闭了add,remove的操作来减少扩容,可以提高内存利用率以及节省内存空间,又兼并了集合操作的便捷性,所以设计者就自己创建了在Arrays中的ArraysList来利用到数组和集合中的优点。