【错误记录】Arrays.asList 的坑

文章目录

概要

最近在写一个需求的时候用到了这个方法生成一个 List,接着再往里面添加数据的时候就报错了,比如下面的例子。

java 复制代码
public class Main {
    public static void main(String[] args) {
        List<Integer> res = Arrays.asList(1, 2, 3);
        res.add(4);
        System.out.println(res);
    }
}

结果就报错了:

原因

下面就来看下 Arrays.asList 的源码。

java 复制代码
public static <T> List<T> asList(T... a) {
    return new ArrayList<>(a);
}

上面会创建一个 ArrayList,这个 ArrayList 不是我们经常用的那一个,而是 Arrays 里面的内部类,这个 List 不支持新增和修改方法,所以一旦用了 add 或者 remove, 就会报错。

小结

说实话,第一次遇到这个错都有点懵,是真没想到 ArrayList 是 Arrays 里面的一个子类,所以如果要通过集合来创建一个可修改的集合,还是直接 new 比较好吧。

java 复制代码
public class Main {
    public static void main(String[] args) {
        List<Integer> list = new ArrayList<>(Arrays.asList(1, 2, 3));
        list.add(4);
        list.add(5);
        System.out.println(list);
    }
}

如有错误,欢迎指出!!!

相关推荐
何政@2 分钟前
Mysql面试篇笔记:
java·数据库·spring boot·笔记·mysql·面试
工一木子12 分钟前
【Java基础】Java中new一个对象时,JVM到底做了什么?
java
馨谙25 分钟前
Exception in thread “main“ java.lang.ExceptionInInitializerError
java·开发语言
caihuayuan434 分钟前
Golang的数据库分库分表
java·大数据·sql·spring·课程设计
柃歌36 分钟前
【UCB CS 61B SP24】Lecture 19 & 20: Hashing & Hashing II 学习笔记
java·数据结构·笔记·学习·算法
试着奔跑的菜鸟1 小时前
经验分享:用一张表解决并发冲突!数据库事务锁的核心实现逻辑
java·经验分享·高并发·分布式锁
云卷️1 小时前
微服务面试题及原理
java·后端·微服务·云原生·架构
瞬间动力1 小时前
1分钟简化理解单体、微服务、分布式和Serverless
java·分布式·微服务·架构·系统架构
HBryce241 小时前
《数据结构》
java·数据结构
郑祎亦1 小时前
【JAVA面试题】== 和 equals() 的区别与使用场景
java·开发语言