Java Set如何实现元素不重复

status
category
date
summary
slug
icon
tags
password

源码实现

HashSet类中的add()方法:
put()方法:

原理

如果set中的元素与传入值重复,则不再添加进去。
可以看到,关于重复的定义:
  1. 如果hash码值不相同,说明是一个新元素,存;
  1. 如果hash码值相同,则继续判断equles:
      • 如果hash码值相同,且equles判断相等,说明元素已经存在,不存;
      • 如果hash码值相同,且equles判断不相等,说明元素不存在,存;
所以关键是两个方法:hashCode()equles()
hash算法计算出的结果就是hash码值;
hash算法的计算方式:
通过对象中的成员来计算出来的结果;
如果成员变量是基本数据类型的值, 那么用这个值直接参与计算;
如果成员变量是引用数据类型的值,那么获取到这个成员变量的hash码值后,再参数计算
例如新建一个Student对象,如果需要用HashSet集合对其进行管理,那么需要重写hashCode()equals()
Loading...

© 刘口子 2018-2025