HashSet内部使用哈希算法去重复的, 当存储对象的时候,先调用对象的HashCode()方法计算一个哈希值, 然后在集合中查找是否有哈希值相同的对象, 如果没有见哈希值相同的对象就直接存入, 如果有相同的就调用equals()方法比较, 比较结构为true就不存, 你叫结果为false则直接存入;
但是, 向HashSet中存储自定义类的对象时, 如果没又重写equals()方法, 那么将会调用Object类的HashCode()方法, 得到当前对象的地址值, 地址簿同也不能去重复;
如果想要相同属性的对象去重复, 那么属性相同的对象必须要返回相同的哈希值, 在HashSet中存储自定义对象, 如果希望去掉重复的元素, 就要重写hashCode()方法和equals()方法; |