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() 创建的
}
相关推荐
编程修仙12 小时前
第九篇 Spring中的代理思想
java·后端·spring
杀死那个蝈坦12 小时前
MyBatis-Plus 使用指南
java·kafka·tomcat·mybatis—plus
liulilittle12 小时前
C++ 并发双阶段队列设计原理与实现
linux·开发语言·c++·windows·算法·线程·并发
I'm Jie12 小时前
告别重复编码!SpringBoot 字段变更(新旧值)日志工具类的规范化设计与优雅实现
java·spring boot·后端
哥谭居民000112 小时前
需求分析,领域划分到选择套用业务模式到转化落地,两个基本案例
java·大数据·需求分析
Tao____12 小时前
适合中小型项目的物联网平台
java·物联网·mqtt·开源·iot
小马爱打代码12 小时前
Spring AI:多模态 AI 大模型
java·人工智能·spring
lly20240612 小时前
并查集快速查找
开发语言
李贺梖梖12 小时前
day07 方法、面向对象1
java
繁星蓝雨12 小时前
我与C++的故事(杂谈)
开发语言·c++