Java : Set集合接口 (重复元素的判断)

文章目录

  • `在使用 TreeSet 子类进行数据保存的时候, 重复元素的判断依靠的是 Comparable 接口完成的, 且可以去掉重复元素.`
  • `但是, 当我们换成 HashSet 后, 重复数据并不会被去掉.`
  • `所以,由于 HashSet 子类与Comparable接口没有任何关系, 所以它判断重复的方式依赖的是 Object 类的两个方法: 这两个方法必须共同完成 `
  • 1. hash 码 : public int hashCode();
  • 2. 对象比较: public boolean equals(Object obj);
    • 面试题: 如果两个对象的 hashCode 相同, equals 不同, 结果是什么?
    • 面试题: 如果两个对象的 hashCode 不同, equals 相同, 结果是什么?
  • 记住: 对象判断, 必须两个都要相同才可以实现.
  • 总结:
    • 个人的原则:

在使用 TreeSet 子类进行数据保存的时候, 重复元素的判断依靠的是 Comparable 接口完成的, 且可以去掉重复元素.

Java : Set集合接口 (重复元素的判断)_第1张图片

但是, 当我们换成 HashSet 后, 重复数据并不会被去掉.

Java : Set集合接口 (重复元素的判断)_第2张图片

所以,由于 HashSet 子类与Comparable接口没有任何关系, 所以它判断重复的方式依赖的是 Object 类的两个方法: 这两个方法必须共同完成

1. hash 码 : public int hashCode();

2. 对象比较: public boolean equals(Object obj);

在java中进行对象比较的操作有两步: 第一步要通过一个对象的唯一编码找到一个对象的信息, 当编码匹配之后, 在调用 equals() 方法进行内容进行比较.

可以直接使用IDE工具自动生成
Java : Set集合接口 (重复元素的判断)_第3张图片
Java : Set集合接口 (重复元素的判断)_第4张图片

如果要标识出对象的唯一性, 一定要 hashCode() 和 equals() 两个方法一起出现.

面试题: 如果两个对象的 hashCode 相同, equals 不同, 结果是什么?

不能消除重复.

面试题: 如果两个对象的 hashCode 不同, equals 相同, 结果是什么?

不能消除重复

记住: 对象判断, 必须两个都要相同才可以实现.

Java : Set集合接口 (重复元素的判断)_第5张图片

总结:

在很多的时候使用 Set 的核心目的不是让其进行排序, 而是让其进行重复元素的过滤, 那么使用 TressSet 就没有意义了, 但是重复元素又需要依靠 hashCode() , equal() 两个方法, 所以如果不是必须的时候, 在使用 Set 接口的时候尽量用系统提供类实现, 例如: String , Integer.

个人的原则:

保存自定义类对象一定用 List 接口
保存系统类的信息的时候一定使用Set接口.

你可能感兴趣的:(Java算法及JDK源码探究,日常小知识随笔,我的百宝箱,java,面试)