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() 创建的
}
相关推荐
Aision_1 小时前
从工具调用到 MCP、Skill完整学习记录
java·python·gpt·学习·langchain·prompt·agi
辞旧 lekkk5 小时前
【Qt】信号和槽
linux·开发语言·数据库·qt·学习·mysql·萌新
zc.z5 小时前
JAVA实现:纯PCM格式音频转换成BASE64
java·音视频·pcm
mask哥6 小时前
力扣算法java实现汇总整理(上)
java·算法·leetcode
2zcode6 小时前
运动模糊图像复原的MATLAB仿真与优化
开发语言·matlab
袁雅倩19976 小时前
当吸尘器、筋膜枪都用上Type-C,供电方案该怎么选?浅谈PD取电芯片ECP5702的应用
c语言·开发语言·支持向量机·动态规划·推荐算法·最小二乘法·图搜索算法
Aaswk7 小时前
Java Lambda 表达式与流处理
java·开发语言·python
是宇写的啊7 小时前
Spring AOP
java·spring
万邦科技Lafite7 小时前
京东item_get接口实战案例:实时商品价格监控全流程解析
java·开发语言·数据库·python·开放api·淘宝开放平台
Cyber4K8 小时前
【Python专项】进阶语法-系统资源监控与数据采集(1)
开发语言·python·php