Arrays.asList();通过该方法返回的List做删除以及添加会报错nested exception is java.lang.UnsupportedOperationException

解决办法:new ArrayList<>(Arrays.asList());此时返回的List则可以正常添加与移除。

今天在做数组的求交集,当时把String[]转换成List<String>,通过Arrays.asList进行转换,当两个list做retainAll操作时候,抛出了异常“java.lang.UnsupportedOperationException”

发生原因:使用asList返回的是Arrays的内部类ArrayList,继承的是父类AbstractList里面的add和remove方法只是抛出异常

public void add(int index, E element) {
        throw new UnsupportedOperationException();
    }
 
public E remove(int index) {
        throw new UnsupportedOperationException();
    }

而java.util.ArrayList是重写了父类的add和remove方法

public boolean add(E e) {
        ensureCapacityInternal(size + 1);  // Increments modCount!!
        elementData[size++] = e;
        return true;
    }
 
public E remove(int index) {
        rangeCheck(index);
 
        modCount++;
        E oldValue = elementData(index);
 
        int numMoved = size - index - 1;
        if (numMoved > 0)
            System.arraycopy(elementData, index+1, elementData, index,
                             numMoved);
        elementData[--size] = null; // clear to let GC do its work
 
        return oldValue;
    }

所以原因就在于,使用asList方法放回的继承的父类的add和remove,就只会抛出UnsupportedOperationException异常,java.util.ArrayList重写了父类的add和remove

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值