通过HashCode 和equals方法去重的
1、先通过对HashCode的hash值进行比较,如果HashCode值不同,则直接添加到集合
2、如果hash值相同,则会调用equals进行比较
如果内容一样则认为重复,则不添加元素
如果内容不相同,不是重复元素
结论:对于hashset的去重 需要对与HashCode与equals 进行重写,对数据以及属性进行相关校验
知识点1:
hashCode:
是老父类Ojbect的方法,是根据对象的地址值进行哈希运算而来的数据(整数)。
ps:哈希值根据地址值运算而来, 地址值不同 hash值不同,反之相同。但是会出现哈希碰撞(地址值不一样,但hash值一样,这种时候就看equals了)。
知识点2:
重写hashcode
是为了让hash算法根据内容计算hash 而不是根据地址值重写。
知识点3:
重写equals
是为了防止hash碰撞的情况,故重写equals。确保去除问题值。