UnsupportedOperationException

本文详细介绍了在尝试从Arrays.asList()返回的列表中移除元素时遇到UnsupportedOperationException的原因。问题源于该列表实际上是一个抽象列表的静态内部类,并未实现remove方法。解决方案是将结果转换为标准的ArrayList。通过理解Java集合框架的这一特性,开发者可以避免此类错误并正确处理集合操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

UnsupportedOperationException

问题描述

将Arrays.asList()的返回结果进行remove时弹出一个UnsupportedOperationException,二脸懵逼。。查找网上别的大神分析明白了原因,做个笔记!

    @Test
    public void test(){
        List<String> list = Arrays.asList(",dddd,".split(","));
        System.out.println(list);
        System.out.println(list.get(0));
        list.remove(0);
        System.out.println(list);

    }

在这里插入图片描述
可以看出正确完整了转换,但是进行remove操作时抛出了这个异常

分析源码原因如下
在这里插入图片描述
1、虽然asList的返回值时ArrayList<> ,但是这个并不是我们平时使用的那个List,而是一个继承于AbstractList的静态内部类

private static class ArrayList<E> extends AbstractList<E>

2、它并没有实现AbstractList的remove方法。

     * @throws ==UnsupportedOperationException if the {@code add} operation
     */
    public boolean add(E e) {
        add(size(), e);
        return true;

问题的解决

使用ArrayList的构造方法,进行一次转化,这样就可以保证得到一个我们熟悉的List

List<String> list = new ArrayList<>( Arrays.asList(",dddd,".split(",")));

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值