关于Arrays.asList方法为啥不能添加探究

本文探讨了为何使用Arrays.asList转换数组后,集合无法执行添加或修改操作。作者通过示例代码展示了调用add方法时抛出UnsupportedOperationException的原因,并解释了这是由于Arrays.ArrayList的实现不允许修改以保持数组的不可变性。这种设计旨在兼顾数组的固定长度特性和集合操作的便利性,同时提高内存效率。
摘要由CSDN通过智能技术生成

关于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来利用到数组和集合中的优点。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值