文章目录
在使用 TreeSet 子类进行数据保存的时候, 重复元素的判断依靠的是 Comparable 接口完成的, 且可以去掉重复元素.
但是, 当我们换成 HashSet 后, 重复数据并不会被去掉.
所以,由于 HashSet 子类与Comparable接口没有任何关系, 所以它判断重复的方式依赖的是 Object 类的两个方法: 这两个方法必须共同完成
1. hash 码 : public int hashCode();
2. 对象比较: public boolean equals(Object obj);
在java中进行对象比较的操作有两步: 第一步要通过一个对象的唯一编码找到一个对象的信息, 当编码匹配之后, 在调用 equals() 方法进行内容进行比较.
可以直接使用IDE工具自动生成
如果要标识出对象的唯一性, 一定要 hashCode() 和 equals() 两个方法一起出现.
面试题: 如果两个对象的 hashCode 相同, equals 不同, 结果是什么?
不能消除重复.
面试题: 如果两个对象的 hashCode 不同, equals 相同, 结果是什么?
不能消除重复
记住: 对象判断, 必须两个都要相同才可以实现.
总结:
在很多的时候使用 Set 的核心目的不是让其进行排序, 而是让其进行重复元素的过滤, 那么使用 TressSet 就没有意义了, 但是重复元素又需要依靠 hashCode() , equal() 两个方法, 所以如果不是必须的时候, 在使用 Set 接口的时候尽量用系统提供类实现, 例如: String , Integer.
个人的原则:
保存自定义类对象一定用 List 接口
保存系统类的信息的时候一定使用Set接口.