讲师中心 微信公众号
AI工具推荐 视频效率加速

在Java里如何实现集合去重操作_JavaSet应用说明

大宇小哥_9461

大宇小哥_9461

发布时间:2026-01-31 00:31:19

|

295人浏览过

|

来源于php中文网

原创

HashSet去重需重写equals()和hashCode(),否则同字段对象仍被视作不同元素;LinkedHashSet可保序去重;TreeSet适用于需排序的去重场景,但不支持null且性能较低;原始类型数组需装箱或用专用集合。

在java里如何实现集合去重操作_javaset应用说明

为什么直接用 HashSet 去重可能出错

不是所有对象放进 HashSet 都能自动去重。关键看 equals() 和 hashCode() 是否被正确重写。比如自定义类 User,若没重写这两个方法,即使两个对象字段完全相同,HashSet 也会当成不同元素。

常见错误现象:set.add(new User("Alice", 25)) 和 set.add(new User("Alice", 25)) 后,集合大小为 2。

  • 必须确保类中重写了 equals() 和 hashCode(),且逻辑一致
  • 使用 Lombok 时,加 @EqualsAndHashCode 是最简方式
  • 基本类型和 String、LocalDate 等 JDK 类已自带合理实现,可直接用

如何对已有 List 快速去重并保持顺序

LinkedHashSet 是兼顾去重与插入顺序的最佳选择,它底层是哈希表 + 双向链表,迭代时按添加顺序返回。

实操建议:

立即学习“Java免费学习笔记(深入)”;

  • 不要用 new HashSet(list) —— 会丢失顺序
  • 推荐写法:new ArrayList(new LinkedHashSet(list))
  • Java 8+ 可用流:list.stream().distinct().collect(Collectors.toList()),但注意 distinct() 依赖 equals()/hashCode(),且性能略低于 LinkedHashSet

TreeSet 去重的适用场景和陷阱

当需要去重后**自然排序**(如升序),且元素实现了 Comparable 或传入了 Comparator,TreeSet 才有意义。它不靠 hashCode(),而是基于比较结果判断重复。

java-api-doc-generator
java-api-doc-generator

分析 Java Spring Boot 后端 Controller 代码,自动生成 Markdown 格式的接口文档。当用户说“生成 Java 接口文档”、“生成 API 文档”、“从 Spring 代码生成文档”时触发。

下载

容易踩的坑:

  • 元素为 null 时,TreeSet 直接抛 NullPointerException
  • 若自定义比较器逻辑有误(比如 compare(a,b) 和 compare(b,a) 符号不相反),会导致去重失败或 ClassCastException
  • 性能比 HashSet 差,时间复杂度是 O(log n),适合数据量小且强依赖排序的场景

数组或原始类型怎么去重

Java 集合框架不直接支持原始类型(如 int[]),也不能把 int 直接塞进 Set<integer></integer> 而不装箱。

实操建议:

立即学习“Java免费学习笔记(深入)”;

  • 对于 int[]:先转成 Integer[] 或用 Arrays.stream(arr).boxed().collect(Collectors.toSet())
  • 注意装箱开销——大数据量时,考虑用第三方库如 Eclipse Collections 的 IntHashSet 或 Trove 的 TIntHashSet
  • 字符串数组去重最简单:new LinkedHashSet(Arrays.asList(strArray))

真正麻烦的从来不是“有没有去重方法”,而是对象是否定义了合理的相等性语义,以及你是否意识到顺序、空值、性能这几件事在不同 Set 实现里根本不是一回事。

热门AI工具

更多
UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

创客贴AI

创客贴AI是一款AI图像与设计工具,AI辅助的智能在线设计工具。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

相关专题

更多
eclipse教程
eclipse教程

php中文网为大家带来eclipse教程合集,eclipse是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。php中文网还为大家带来eclipse的相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

690

2023.06.14

eclipse怎么设置中文
eclipse怎么设置中文

eclipse设置中文的方法:除了设置界面为中文外,你还可以为Eclipse添加中文插件,以便更好地支持中文编程。例如,你可以安装EBNF插件来支持中文变量名,或安装Chinese Helper来提供中文帮助文档。本专题为大家提供eclipse设置中文相关的各种文章、以及下载和课程。

5766

2023.07.24

c语言编程软件有哪些
c语言编程软件有哪些

c语言编程软件有GCC、Clang、Microsoft Visual Studio、Eclipse、NetBeans、Dev-C++、Code::Blocks、KDevelop、Sublime Text和Atom。更多关于c语言编程软件的问题详情请看本专题的文章。php中文网欢迎大家前来学习。

8939

2023.11.02

Eclipse版本号有哪些区别
Eclipse版本号有哪些区别

区别:1、Eclipse 3.x系列:Eclipse的早期版本,包括3.0、3.1、3.2等;2、Eclipse 4.x系列:Eclipse的最新版本,包括4.0、4.1、4.2等;3、Eclipse IDE for Java Developers等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2804

2024.02.23

eclipse和idea有什么区别
eclipse和idea有什么区别

eclipse和idea的区别:1、平台支持;2、内存占用;3、插件系统;4、智能代码提示;5、界面设计;6、调试功能;7、学习曲线。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

662

2024.02.23

eclipse设置中文全教程
eclipse设置中文全教程

本专题整合了eclipse设置中文相关教程,阅读专题下面的文章了解更多详细操作。

3726

2025.10.10

eclipse字体放大教程
eclipse字体放大教程

本专题整合了eclipse字体放大教程,阅读专题下面的文章了解更多详细内容。

3745

2025.10.10

eclipse左边栏不见了解决方法
eclipse左边栏不见了解决方法

本专题整合了eclipse左边栏相关教程,阅读专题下面的文章了解更多详细内容。

508

2025.10.15

Vite 项目如何打包和部署
Vite 项目如何打包和部署

Vite项目打包部署专题汇集生产构建、产物预览、输出目录、资源路径、Nginx与GitHub Pages部署及常见白屏和路由404问题的已审核文章,帮助读者完成上线流程。

20

2026.10.28

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
dev.java 官方:Learn Java
dev.java 官方:Learn Java

共0课时 | 0人学习

Java JDBC数据库连接官方教程
Java JDBC数据库连接官方教程

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn