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() 创建的
}
相关推荐
Tiger_shl8 分钟前
C# 预处理指令 (# 指令) 详解
开发语言·c#
介一安全20 分钟前
【Frida Android】基础篇6:Java层Hook基础——创建类实例、方法重载、搜索运行时实例
android·java·网络安全·逆向·安全性测试·frida
xyy202532 分钟前
Spring事务的传播方式
java·数据库·spring
@Kerry~39 分钟前
phpstudy .htaccess 文件内容
java·开发语言·前端
roshy40 分钟前
x86、arm、rsc-v指令集架构,指令集、OS、应用3者的关系
java·arm开发·架构
CRMEB系统商城40 分钟前
CRMEB多商户系统(PHP)v3.3正式发布,同城配送上线[特殊字符]
java·开发语言·小程序·php
iナナ1 小时前
Java优选算法——位运算
java·数据结构·算法·leetcode
毕设源码-钟学长1 小时前
【开题答辩全过程】以 濒危动物保护管理系统为例,包含答辩的问题和答案
java·eclipse
sali-tec1 小时前
C# 基于halcon的视觉工作流-章45-网格面划痕
开发语言·算法·计算机视觉·c#
一壶浊酒..1 小时前
python 爬取百度图片
开发语言·python·百度