HashSet中判断两个元素是否重复的标准,以及重复后的存储方式
Set集合的存储特点是:元素之间不能重复、元素之间没有顺序。
HashSet判断元素是否相等的依据:对象的equals()比较返回false;且hashCode值不相等,判断两个元素不相等;
那么equals()方法和hashCode值不一致的情况呢?
*上面的代码C对象 添加了一个有一个没有被添加进来,其余的都被添加进来了。
分析:
*第一种情况A对象,equals:比较相同,hashcode:比较不同
* 由于两个对象的hashcode值不同所以HashSet将会把他们存储在不同的位置(HaseSet根据不同的hashcode来存储值)
*第二种情况B对象,equals:比较不同,hashcode:比较相同
* 由于两个对象的hashcode值相等,HashSet试图把它保存在同一位置,而实际上又不行,所以他们会放在同一个"槽位"中,导致发生性能降低。
*第二种情况C对象,equals:比较相同,hashcode:比较相同
* 创建一个对象
*注意:一般情况两个对象的equals和hashcode两个比较结果应该保持一致
*
*hashset与数组的区别:
*数组元素的长度是固定的、数组的索引也是连续的,无法自由增加数组的长度。而set和他相反。