Java 集合:哪些集合必须重写 equals() 和 hashCode()?

发布时间:2026/10/20 8:58:45
Java 集合:哪些集合必须重写 equals() 和 hashCode()? [TOC](Java 集合哪些集合必须重写 equals() 和 hashCode())The Begin点点关注收藏不迷路⬇ ⬇ 底部 ⬇ ⬇一、一句话核心结论所有基于「哈希表 / 散列」实现的集合都必须重写equals()和hashCode()只要集合底层用到了HashMap / HashSet / Hashtable这类结构自定义对象放进去不重写就无法去重、无法查找。二、必须重写的集合清单高频使用下面这些集合放入自定义对象时必须重写两个方法否则功能异常1. Set 系列全部哈希型都要HashSetLinkedHashSet继承 HashSet底层也是 HashMapCopyOnWriteArraySet并发集合底层依赖 equals 判断重复作用保证元素不重复2. Map 系列key 必须重写value 不需要Map 只对key做唯一性校验value 随便存所以Map 的 key 必须重写key 必须重写HashMapLinkedHashMapWeakHashMapHashtableConcurrentHashMap线程安全的哈希表作用保证 key 不重复、能正确 get 取值3. 其他依赖哈希的集合PriorityQueue不一定必须但某些比较逻辑需要HashSet 相关工具类/并发包装类三、不需要重写的集合重点区分下面这些完全不依赖 hashCode只依赖equals / 比较器所以只重写 equals 就行hashCode 可写可不写1. List 系列ArrayListLinkedListVector它们判断重复用的是equals()根本不用 hashCode2. 有序/树型集合依赖 Comparable / ComparatorTreeSetTreeMap这两个最特殊不看 hashCode不看 equals只看 compareTo / 比较器只要比较结果0就判定为重复元素。四、超级清晰总结表建议直接保存集合类型是否需要重写 equals是否需要重写 hashCode依赖规则HashSet / LinkedHashSet✅ 必须✅ 必须hashCode equalsHashMap / LinkedHashMap✅ key 必须✅ key 必须hashCode equalsConcurrentHashMap✅ key 必须✅ key 必须hashCode equalsArrayList / LinkedList✅ 需要❌ 不需要只依赖 equalsTreeSet / TreeMap❌ 不需要❌ 不需要只依赖比较器五、最关键的 3 条记忆口诀只要带 Hash 字样的集合 → 两个方法都必须重写List 集合 → 只重写 equals 即可Tree 开头的集合 → 不看这两个方法只看比较器六、高频面试题标准答案背会直接用问哪些集合需要重写 equals 和 hashCode答所有基于哈希表实现的集合都需要包括HashSet、LinkedHashSet、HashMap、LinkedHashMap、ConcurrentHashMap等。这些集合判断元素/键是否重复会先比较hashCode再比较equals如果不重写就会出现内容相同但判定为不同对象的问题。The End点点关注收藏不迷路⬆ ⬆ 顶部 ⬆ ⬆

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询