美文网首页
2、HashSet 是如何保证不重复的

2、HashSet 是如何保证不重复的

作者: Jeffery大侠 | 来源:发表于2018-12-17 13:26 被阅读0次

    1:看一下add方法:

    使用的是HashMap类中的put方法,map中的value是常量

    2:思考一个问题,如果存入的值是int,或者一些基础类型,是很好理解的,这个不可重复其实是新的value代替了旧的value,只不是新旧value是一样的(PRESENT);

    但是,如果存入的是一个对象呢,怎么保证其不重复呢????那我们看一下map中的put方法吧。

    3:源码如下:

    a:对key的hashCode进行hash,计算出应该在的位置index,

    b:取出map中这个位置的元素e,e可能是一个链表(详情看程序员小灰HashMap的介绍),对这个位置的链表进行循环;

    c:如果hash码值不相同,说明是一个新元素,存;

    d: 如果hash码值相同,且equles判断相等,说明元素已经存在,不存;

    e:如果hash码值相同,且equles判断不相等,说明元素不存在,存;

    所以,判断两个对象是不是重复的,主要依靠的是hashCode方法和equals方法,所以,一个对象如果想通过HashSet方法判断是不是重复的,需要重写hashCode方法和equals方法

    例如:

    如:新建一个Person对象,重写hashCode方法

    可以看出,Person对象内两个参数name,age,hash码值是这两者计算后的记过,那么完全有可能两个对象name,age都不同,hash码值相同;

    下面看下equles()方法:

    参考文章:https://blog.csdn.net/u010698072/article/details/52802179

    https://www.cnblogs.com/nickhan/p/8550655.html

    相关文章

      网友评论

          本文标题:2、HashSet 是如何保证不重复的

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