java每日一记 —— List创建的方式判断

目录

前言:判断一个Java List 集合是由 new 关键字实例化创建的,还是由 Arrays.asList() 方法创建的,直接从集合本身并不能直接得出结论,因为这两种方式创建的 List 实例在运行时都是 List 接口的实现类对象,表现形式上没有明显的区别。

可以通过以下间接方式分析:

1.类型判断

如果你知道 Arrays.asList() 创建的 List 是 java.util.Arrays$ArrayList 类型(这是一个内部类,继承自 AbstractList),那么你可以通过 instanceof 或 getClass() 判断其具体类型。但由于这属于 Arrays 内部实现,不推荐依赖这种实现细节来做出判断

java 复制代码
if (yourList instanceof java.util.Arrays$ArrayList) {
    // 可能是由 Arrays.asList() 创建的
} else if (yourList instanceof ArrayList || yourList instanceof LinkedList || ...) {
    // 可能是由 new ArrayList<>(), new LinkedList<>() 等创建的
}

2.行为特性

Arrays.asList() 返回的列表是固定大小的(不可修改大小),试图调用 add、remove 等修改大小的方法会导致 UnsupportedOperationException 异常。而通过 new ArrayList<>() 创建的列表则是可变大小的,可以进行元素的添加和删除

java 复制代码
try {
    yourList.add(someElement);
    // 如果没有抛出 UnsupportedOperationException,则可能不是 Arrays.asList() 创建的
} catch (UnsupportedOperationException e) {
    // 可能是由 Arrays.asList() 创建的
}
相关推荐
whm277717 小时前
Visual Basic 参数传送-形参与实参
开发语言·visual studio
9号达人17 小时前
if-else 优化的折中思考:不是消灭分支,而是控制风险
java·后端·面试
共享家952717 小时前
QT-常用控件(多元素控件)
开发语言·前端·qt
幸运小圣17 小时前
Iterator迭代器 【ES6】
开发语言·javascript·es6
葱头的故事17 小时前
将传给后端的数据转换为以formData的类型传递
开发语言·前端·javascript
不知道累,只知道类17 小时前
Java 在AWS上使用SDK凭证获取顺序
java·aws
咖啡Beans18 小时前
SpringBoot2.7集成Swagger3.0
java·swagger
一念&18 小时前
每日一个C语言知识:C 数组
c语言·开发语言·算法
小年糕是糕手18 小时前
【数据结构】单链表“0”基础知识讲解 + 实战演练
c语言·开发语言·数据结构·c++·学习·算法·链表
聪明的笨猪猪18 小时前
Java JVM “垃圾回收(GC)”面试清单(含超通俗生活案例与深度理解)
java·经验分享·笔记·面试