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() 创建的
}
相关推荐
liann119几秒前
4.3.2_WEB——WEB后端语言——PHP
开发语言·前端·网络·安全·web安全·网络安全·php
元让_vincent13 分钟前
DailyCoding C++ | SLAM里的“幽灵数据”:从一个未初始化的四元数谈C++类设计
开发语言·c++·slam·构造函数·类设计·激光里程计
SmartBrain21 分钟前
FastAPI 与 Langchain、Coze、Dify 技术深度对比分析
java·架构·fastapi
A9better24 分钟前
C++——指针与内存
c语言·开发语言·c++·学习
FunW1n37 分钟前
tmf.js Hook Shark框架相关疑问归纳总结报告
java·前端·javascript
琢磨先生David44 分钟前
Java算法每日一题
java·开发语言·算法
重生之后端学习1 小时前
114. 二叉树展开为链表
java·数据结构·算法·链表·职场和发展·深度优先
xyq20241 小时前
SQL `LAST()` 函数详解
开发语言
Lun3866buzha1 小时前
人员跌倒检测系统:基于Faster R-CNN的改进模型实现与优化_1
开发语言·r语言·cnn
csdn2015_1 小时前
mybatisplus自动生成id
java·mybatis