最简洁高效的方式是直接用hashset构造方法传入arraylist。hashset提供接收collection参数的构造方法,arraylist实现collection接口,可自动去重;需确保元素正确实现equals和hashcode,自定义类须重写这两个方法;如需保持插入顺序,可用linkedhashset。

直接用 HashSet 的构造方法传入 ArrayList 即可,这是最简洁、高效的方式。
使用构造函数一次性转换
Java 集合框架中,HashSet 提供了接收 Collection 类型参数的构造方法。由于 ArrayList 实现了 Collection 接口,所以可以直接传入:
- 代码示例:
ArrayList<string> list = new ArrayList(Arrays.asList("a", "b", "a", "c"));</string>HashSet<string> set = new HashSet(list); // 自动去重</string>
此时 set 包含 {"a", "b", "c"}(顺序不保证),重复元素 "a" 已被自动忽略。
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
注意元素必须正确实现 equals 和 hashCode
去重是否生效,取决于元素类型的 equals() 和 hashCode() 方法:
- 对于
String、基本类型包装类(如Integer)、LocalDate等 JDK 内置类型,已正确实现,可直接用; - 如果是自定义对象(如
User类),必须重写equals和hashCode,否则即使内容相同也会被视为不同对象,无法去重。
如果需要保留插入顺序,考虑 LinkedHashSet
HashSet 不保证顺序,若想保持原 ArrayList 中首次出现的顺序,可用 LinkedHashSet:
Set<string> set = new LinkedHashSet(list);</string>
它同样去重,但迭代时按首次添加的顺序返回元素。
不推荐手动遍历 add(除非有额外逻辑)
虽然可以写循环逐个 add,但没必要:
- 构造函数内部就是遍历 + add,效果完全一样;
- 手动写反而冗余,还容易出错(比如忘记判空或异常处理)。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










