美文网首页
HashSet自定义元素类型的重复判定问题

HashSet自定义元素类型的重复判定问题

作者: 杨大沫 | 来源:发表于2018-11-28 08:20 被阅读0次

HashSet是无重复的集合,那么问题就是如何判定一个元素是否和另一个元素是相等的。这里需要自定义相等性。当有对象加入HashSet时,首先java会通过对象的hashcode值来判断对象加入的位置及是否有重复的hashcode。如果没有重复的hashcode就认为没有相同的对象。如果有重复的hashcode,会再调用equals()方法判断有重复hashcode的两个对象是否真的相等。如果相等那么HashSet就知道要加入的项目已经重复了,加入的操作就不会发生。相等性有两个层次

  1. 引用相等性: 如果只认为引用指向同一个对象才算相等,那么什么都不用做。对引用调用hashCode()会返回引用指向的对象特有的序号(大部分是对对象在堆上的地址的映射,因此不会有重复的序号。但也有像String一样的其实是字面值的映射)
  2. 对象相等性:如果实际需要把不同的对象视为相等的,需要覆盖从Object继承下来的hashCode()才能确保两个对象有相同的hashcode,然后需要覆盖equals()方法。之所以需要有equals()方法是因为hashcode相同的对象未必相同,hashCode()所使用的杂凑算法可能会凑巧让多个对象返回相同的杂凑值,但这种情况也比较少,所以equals其实很少会被调用。

相关文章

  • HashSet自定义元素类型的重复判定问题

    HashSet是无重复的集合,那么问题就是如何判定一个元素是否和另一个元素是相等的。这里需要自定义相等性。当有对象...

  • 第十八天 - 知识点总结

    set里面的元素都是去重复的,但是这种重复的判定是有区别的:HashSet 在HashSet中判断两个元素是否是同...

  • day14-13-集合框架(HashSet存储自定义对象)

    往hashSet集合中存入自定义对象,同姓名同年龄,视为同一个人。为重复元素。 HashSet是如何保证元素唯一性...

  • HashSet重复元素判断

    HashSet重复元素判断: HashSet不能添加重复的元素,当调用add(Object)方法时候, 首先会调用...

  • java源码分析之HashSet

    我们先提出几个问题: 1.HashSet怎么保证添加元素不重复?2.HashSet是否允许null元素?3.Has...

  • HashSet简介

    HashSet简介 HashSet是Set接口的实现,不允许元素重复 元素不重复是基于HashMap实现 非线程安...

  • Java数据结构总结之Set

    HashSet存储自定义类StudentSet接口:是不包括重复元素的Collection接口 1.首先创建数据元...

  • HashSet

    HashSet HashSet实现了Set接口,表示的是无序的不可重复的元素的集合。 构造函数1、HashSet(...

  • List多种去重方法&去重后排序

    通过HashSet踢除重复元素 循环List中的所有元素然后删除重复 List去重后排序

  • 02.HashSet存储自定义对象并遍历

    HashSet存储自定义对象并遍历 HashSet唯一性原理 规则:新添加到HashSet集合的元素都会与集合中已...

网友评论

      本文标题:HashSet自定义元素类型的重复判定问题

      本文链接:https://www.haomeiwen.com/subject/udwoqqtx.html