最简洁高效的方式是直接用ArrayList构造方法传入HashSet:一行代码、O(n)时间复杂度、新旧集合无引用关系;注意HashSet无序,转换后顺序不固定,需有序时应选用LinkedHashSet或排序处理。

直接用 ArrayList 的构造方法传入 HashSet 即可,这是最简洁、高效的方式。
使用 ArrayList 构造器(推荐)
这是最常用也最推荐的做法,底层会自动遍历 HashSet 并把元素添加到新创建的 ArrayList 中:
- 代码简单,一行搞定
- 时间复杂度为 O(n),性能好
- 新列表与原 HashSet 无引用关系,修改互不影响
示例:
Set<String> set = new HashSet<>(Arrays.asList("a", "b", "c"));ArrayList<String> list = new ArrayList<>(set);
使用 addAll 方法(适合已有 ArrayList)
如果已经有一个现成的 ArrayList,想把 HashSet 的内容加进去,可用 addAll:
立即学习“Java免费学习笔记(深入)”;
- 不会新建对象,复用已有列表
- 注意:若原列表非空,结果会包含原有元素 + HashSet 元素
示例:
ArrayList<String> list = new ArrayList<>();list.addAll(set);
注意事项
HashSet 本身是无序的,所以转换后的 ArrayList 中元素顺序不固定(取决于哈希值和扩容过程),不能依赖插入顺序。如需保持顺序,应改用 LinkedHashSet 或先排序再转:
- 若需按字母/自然顺序排列,可先对 HashSet 转成 Stream 再 sorted
- 若需按插入顺序,初始化时用 LinkedHashSet 替代 HashSet
不建议的方式:循环手动添加
虽然可行,但冗余且低效:
ArrayList<String> list = new ArrayList<>();for (String s : set) {
list.add(s);
}
没必要写三行做一行能完成的事。


















