Set集合的存储特点是:元素之间不能重复、元素之间没有顺序。

HashSet判断元素是否相等的依据:对象的equals()比较返回false;且hashCode值不相等,判断两个元素不相等;

那么equals()方法和hashCode值不一致的情况呢?

HashSet中判断两个元素是否重复的标准,以及重复后的存储方式

*上面的代码C对象 添加了一个有一个没有被添加进来,其余的都被添加进来了。

分析:
 *第一种情况A对象,equals:比较相同,hashcode:比较不同
 *    由于两个对象的hashcode值不同所以HashSet将会把他们存储在不同的位置(HaseSet根据不同的hashcode来存储值)
 *第二种情况B对象,equals:比较不同,hashcode:比较相同
 *    由于两个对象的hashcode值相等,HashSet试图把它保存在同一位置,而实际上又不行,所以他们会放在同一个"槽位"中,导致发生性能降低。
 *第二种情况C对象,equals:比较相同,hashcode:比较相同
 *    创建一个对象
 *注意:一般情况两个对象的equals和hashcode两个比较结果应该保持一致
 *
 *hashset与数组的区别:
 *数组元素的长度是固定的、数组的索引也是连续的,无法自由增加数组的长度。而set和他相反。

相关文章:

  • 2021-09-22
  • 2021-11-18
  • 2021-05-03
  • 2020-02-24
  • 2020-02-26
  • 2021-11-18
  • 2021-10-18
  • 2021-11-27
猜你喜欢
  • 2019-10-31
  • 2021-10-25
  • 2021-08-30
  • 2021-09-02
  • 2021-11-18
  • 2021-11-18
相关资源
相似解决方案