当前位置: 首页 > news >正文

【Java集合】

Collections.singletonList() 是 Java 中 java.util.Collections 类提供的一个创建不可变的单元素列表的实用方法。它的核心目的是高效、安全地创建一个仅包含一个指定元素的列表。以下是其主要用法和关键特性:

📌 1. 核心语法

public static <T> List<T> singletonList(T o)
  • 参数 o:要放入列表的唯一元素。
  • 返回值:一个不可修改(Immutable)的 List 对象,仅包含元素 o

🛠 2. 基本用法示例

// 创建一个只包含字符串 "Hello" 的不可变列表
List<String> singleElementList = Collections.singletonList("Hello");// 输出: [Hello]
System.out.println(singleElementList);// 尝试修改列表 (会抛出异常!)
singleElementList.add("World"); // ❌ 抛出 UnsupportedOperationException
singleElementList.remove(0);    // ❌ 同样抛出 UnsupportedOperationException
singleElementList.set(0, "Hi"); // ❌ 抛出 UnsupportedOperationException

⚡ 3. 关键特性

  • 单元素:严格只包含一个元素,初始化后无法添加、删除或替换元素
  • 不可变性 (Immutable):返回的列表是只读的。任何试图修改列表的操作(add, remove, set, clear)都会抛出 UnsupportedOperationException
  • 空间与效率:相比 new ArrayList<>(Arrays.asList(element)) 或手动创建 ArrayList 并添加一个元素,singletonList()内存占用和性能上更高效,因为它底层是为单元素场景优化的特殊实现。
  • null 支持:允许元素为 null
    List<Object> nullList = Collections.singletonList(null); // 有效
    

🆚 4. 与其他方法的比较

方法元素数量可变性典型用途内存效率
Collections.singletonList(e)仅1个不可变传递单元素只读集合✅ 最高
Arrays.asList(e)1个或更多部分可变快速创建固定大小列表✅ 高
new ArrayList<>() + add(e)任意完全可变需要动态修改的列表❌ 较低
  • Arrays.asList(element) 的区别
    • Arrays.asList 创建的列表大小固定(不能增删),但可以修改已有位置的元素 (set 方法可用)。
    • Collections.singletonList 创建的列表完全不可修改(包括 set 操作)。
    • Arrays.asList 可以接受多个元素,singletonList 严格一个。

💡 5. 典型应用场景

  1. API 参数传递:当某个方法要求传入一个 CollectionList 类型的参数,但你只需要传递一个元素时。
    // 例如:JPA 查询设置参数
    Query query = em.createQuery("SELECT u FROM User u WHERE u.id = :id");
    query.setParameter("id", userId); // 单个参数通常直接传值
    // 但如果 API 要求传 Collection(如 IN 查询):
    Query inQuery = em.createQuery("SELECT u FROM User u WHERE u.status IN :statuses");
    inQuery.setParameter("statuses", Collections.singletonList("ACTIVE")); // ✅ 安全高效
    
  2. 返回值:方法需要返回一个只读的、包含单个结果的列表。
    public List<Result> findLatestResult() {Result latest = ... // 获取最新结果的逻辑if (latest != null) {return Collections.singletonList(latest); // 返回不可变单元素列表} else {return Collections.emptyList(); // 返回空列表}
    }
    
  3. 避免空指针:替代可能返回 null 的方法,返回一个空列表 (emptyList()) 或单元素列表 (singletonList()) 更符合“空集合优于 null”的最佳实践。
  4. 结合流操作 (Streams):作为 Stream 操作的输入源。
    Stream.of("A", "B", "C").flatMap(s -> Collections.singletonList(s.toLowerCase()).stream()) // 将每个元素转为小写列表再扁平化.forEach(System.out::println); // 输出 a, b, c
    

⚠ 6. 重要注意事项

  • 禁止修改:永远记住返回的列表不能进行任何结构性修改(增删)或内容修改(set)。
  • 不可序列化:返回的列表实现 (SingletonList) 未实现 Serializable 接口。如果需要序列化包含单元素的列表,应使用其他方式(如 new ArrayList<>(Collections.singletonList(e)),但会失去不可变性和内存效率)。
  • 替代方案
    • Java 9+:优先使用 List.of(element) 创建不可变单元素列表List.of() 是更现代、更推荐的方式(同样不可变,且支持序列化)。
    • 可变的单元素列表:使用 new ArrayList<>(Arrays.asList(element)) 或直接创建 ArrayList 并添加元素。

📚 总结
Collections.singletonList(element) 是创建高效、内存友好且严格不可变的单元素列表的标准方法。它在传递只读单元素集合、避免 null 返回、配合 API 设计等场景中非常有用。但在 Java 9 及以上版本,更推荐使用 List.of(element) 作为其现代替代品。务必牢记其不可变性限制,避免运行时异常。

由小艺AI生成<xiaoyi.huawei.com>

http://www.dtcms.com/a/464802.html

相关文章:

  • 停止Conda开机自动运行方法
  • 湘潭市高新建设局施工报建网站wordpress 宕机
  • 复杂结构数据挖掘(二)关联规则挖掘 Association rule mining
  • Windows 上安装 PostgreSQL
  • 基于JETSON/x86+FPGA+AI的5G远程驾驶座舱时延验证方案
  • 支持向量机(SVM)完全解读
  • 单片机学习日记
  • 重庆网站制作多少钱app设计开发哪家好
  • AI大模型学习(17)python-flask AI大模型和图片处理工具的从一张图到多平台适配的简单方法
  • 如何通过 7 种解决方案将文件从PC无线传输到Android
  • Word 为每一页设置不同页边距(VBA 宏)
  • wordpiece、unigram、sentencepiece基本原理
  • css word-spacing属性
  • 使用 python-docx 库操作 word 文档(2):在word文档中插入各种内容
  • 中企动力销售工作内容白城网站seo
  • 从0死磕全栈之Next.js 企业级 `next.config.js` 配置详解:打造高性能、安全、可维护的中大型项目
  • 在JavaScript中,const和var的区别
  • 【SDR课堂第36讲】RFSOC PS软件开发入门指南(一)
  • 学做网站中国设计网站导航
  • [嵌入式系统-84]:NPU/TPU/LPU有指令集吗?
  • 光伏安全协议-安全责任协议书8篇
  • Java 单元测试全攻略:JUnit 生命周期、覆盖率提升、自动化框架与 Mock 技术
  • SaaS多租户数据隔离实战:MyBatis拦截器实现行级安全方案
  • 【深入理解计算机网络08】网络层之IPv4
  • 网站的标签wordpress 导航栏居中
  • 解决电脑提示“0xc000007b错误”的简单指南
  • 【STM32项目开源】基于STM32的智能家居安防系统
  • 网络营销方式思维导图aso优化榜单
  • HKM9000视频处理卡
  • 机器视觉的平板显示屏加强膜贴合应用