Collections.list 是将 Enumeration 一次性遍历封装为 ArrayList 的静态工具方法,支持泛型、返回可修改列表,但不重用原枚举、不校验 null、无并发安全保证,适用于 Properties 和 ServletContext 等老 API 适配。

Collections.list 是 Java 集合框架中一个静态工具方法,用于将遗留的 Enumeration 对象(常见于早期 API,如 java.util.Properties、javax.servlet.ServletContext 等)**一次性遍历并封装为 ArrayList**,提供更现代、易用的集合操作能力。
方法签名与基本用法
该方法定义在 Collections 工具类中:
public static
当用户要求为 Java 代码添加注释、修改注释、审查注释、整理注释格式,或要求按照代码注释规范处理 Java 文件时,使用本技能。本技能用于统一生成和维护 Java 类注释模板、按 Git 对比 release 判断版本号、补充每行代码上方中文块注释、调整注释空行规则,并保持 Java 文件 UTF-8 无 BOM 编码。典型触发场景包括:补充类注释、更新 @version、检查 @author 来源、整理行尾注释、把注释放到代码上一行、检查注释是否符合规范、构建前检查 Java 注释风格。
它接收一个泛型 Enumeration<t></t>,返回一个包含其全部元素的 ArrayList<t></t>。内部会逐个调用 e.hasMoreElements() 和 e.nextElement(),直到枚举结束。
立即学习“Java免费学习笔记(深入)”;
典型使用场景
- 从
Properties中获取所有键或值:ArrayList<string> keys = Collections.list(props.propertyNames());</string> - 获取 Servlet 上下文中的初始化参数名:
ArrayList<string> initParams = Collections.list(servletContext.getInitParameterNames());</string> - 适配老式 API 返回的
Enumeration,以便使用stream()、forEach、contains等现代集合方法。
注意事项与限制
- 该方法是一次性消费:调用后原
Enumeration无法重用(因为已遍历完毕);若需多次使用,应自行缓存或重新获取。 - 返回的是
ArrayList,不是不可变集合,可自由修改;如需只读视图,需额外包装:Collections.unmodifiableList(...)。 - 不支持
null元素校验——若原始Enumeration包含null,它们会被原样加入列表(Java 8+ 的ArrayList允许null)。 - 没有并发安全保证:若
Enumeration背后数据源被并发修改,行为未定义,应确保遍历时数据稳定。
替代方案对比
在 Java 8+ 中,也可手动用 Stream 实现类似效果:
ArrayList<string> list = Collections.list(enumeration);</string>
等价于:
ArrayList<string> list = Collections.list(enumeration).stream().collect(Collectors.toCollection(ArrayList::new));</string>
但显然前者更简洁直接。对于简单转换,Collections.list 仍是首选桥接方式。

















