HashSet的底层存放依据是根据算法求出的,所以它会根据元素的哈希值来考略其应该存放在什么位置.
我们在堆上新new对象的时候,每个新建的对象的哈希值都是不同的,即使属性相同的对象,也会认为是两个不同的元素,分别存在不同的位置.
当我们依据对象属性重写hashCode()方法后,当对象属性完全相同,会被判断为哈希值相同,被HashSet集合判断为存在同一个位置.
这个时候我们就要重写equals()方法来判断是否为同一个元素,判断相同,则存入,判断不同,则不存如.
很多人不理解String类为什么可以直接存放就可以去重,其实是String类已经重写了hashCode方法和equals()方法.
|
|