Set没有重复元素,如果存入自定义的对象,想要去重的话,要:

  1. 覆盖equals
  2. 覆盖hashCode

如果两个自定义对象,属性完全相同,那么就判定为同一个对象

hashCode

hashCode 是一个返回 int 类型的值的方法,是在Object类中定义的,所以每个对象都有此方法,该方法为 native 方法(native方法是原生方法,是用C语言或者C++写的),所以不能看到内部实现的

hashCode 值对应着内存存放的地址,每一个对象的 hashCode 值都是不一样的

Set 是怎么去重的

  1. setadd 方法会执行对象的 hashCode
  2. hashCode 相同的时候,会去调用 equalsequals 结果相同则判定为重复元素,不相同则判定为不同的元素