开发问题记录-UnsupportedOperationException异常

今天在开发过程中碰到了一个异常,之前都没注意过,特地记录一下。
在开发过程中,我想移除数组中的一个元素,又偷懒不想去挨个遍历,于是想到了List中的remove方法;那么能否将数组转换为集合呢?可以的,只需要使用Arrays.asList()方法,在其中传入数组即可返回List集合。这里我写了几行代码来模拟这个过程。

/**
 * @author CaveWang
 * @date 2022/10/15 15:17
 */
public class ConvertException {
    public static void main(String[] args) {
        String str[] = {"a","b","c"};
        List<String> strings = Arrays.asList(str);
        strings.remove("a");
    }
}

看到这里是不是还觉得这能有什么问题啊,这不很正常嘛?一运行,完蛋,抛出异常如下:

Exception in thread "main" java.lang.UnsupportedOperationException
	at java.util.AbstractList.remove(AbstractList.java:161)
	at java.util.AbstractList$Itr.remove(AbstractList.java:374)
	at java.util.AbstractCollection.remove(AbstractCollection.java:293)
	at day3.ConvertException.main(ConvertException.java:14)

可以看到,第14行也就是strings.remove(“a”);这里抛出了不支持的操作异常,网上查找了下,原来是Arrays.asList(strings);方法返回的List对象不是我们常见的ArrayList,而是Arrays的一个内部类,也就是说需要进行一下类型转换才可以使用remove方法。
解决方案如下:

//先创建一个我们常用的ArrayList
List<String> list = new ArrayList<>();
//再将Arrays.asList(strings);得到的list复制到ArrayList中
list.addAll(Arrays.asList(strings));

完整操作如下:

/**
 * @author CaveWang
 * @date 2022/10/15 15:17
 */
public class ConvertException {
    public static void main(String[] args) {
        String str[] = {"a","b","c"};
        List<String> strings = Arrays.asList(str);
        ArrayList list = new ArrayList();
        list.addAll(strings);
        list.remove("a");
        list.forEach(s-> System.out.println(s));
    }
}

输出结果:

b
c
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值