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

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和他相反。