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

Collections.list 是 Java 集合框架中一个静态工具方法,用于将遗留的 Enumeration 对象(常见于早期 API,如 java.util.Properties、javax.servlet.ServletContext 等)**一次性遍历并封装为 ArrayList**,提供更现代、易用的集合操作能力。
方法签名与基本用法
该方法定义在 Collections 工具类中:
public static
它接收一个泛型 Enumeration,返回一个包含其全部元素的 ArrayList。内部会逐个调用 e.hasMoreElements() 和 e.nextElement(),直到枚举结束。
典型使用场景
- 从
Properties中获取所有键或值:ArrayListkeys = Collections.list(props.propertyNames()); - 获取 Servlet 上下文中的初始化参数名:
ArrayListinitParams = Collections.list(servletContext.getInitParameterNames()); - 适配老式 API 返回的
Enumeration,以便使用stream()、forEach、contains等现代集合方法。
注意事项与限制
- 该方法是一次性消费:调用后原
Enumeration无法重用(因为已遍历完毕);若需多次使用,应自行缓存或重新获取。 - 返回的是
ArrayList,不是不可变集合,可自由修改;如需只读视图,需额外包装:Collections.unmodifiableList(...)。 - 不支持
null元素校验——若原始Enumeration包含null,它们会被原样加入列表(Java 8+ 的ArrayList允许null)。 - 没有并发安全保证:若
Enumeration背后数据源被并发修改,行为未定义,应确保遍历时数据稳定。
替代方案对比
在 Java 8+ 中,也可手动用 Stream 实现类似效果:
ArrayList
等价于:
ArrayList
但显然前者更简洁直接。对于简单转换,Collections.list 仍是首选桥接方式。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











