A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

我们度知在集合ArryList al =new ArrayList()中可以操作相同元素,但在 hashSet集合中添加相同元素,却不被
显示,或者对以前的元素进行修改后,在进行删除,结果显示无法删除 为什么啦?

4 个回复

倒序浏览
HashSet是Set集合下的一个子类,底层是哈希表结构。而Set集合的特点是元素是无序的,是不可重复的,所以hashSet中的元素也是无序的,不可重复的。往hashSet集合中添加相同元素,不是不显示,而是没有添加进去。它判断元素是否相同的依据是hashCode()方法和equals()方法。
而ArrayList底层结构是数组结构。因为List集合是有序的,是带有索引的,就如同在数组中可以添加相同元素一样。
至于在删除的时候,判断的依据还是hashCode()和equals() 方法。例如,要删除hashSet集合中的一个对象A,那么集合就会判断元素列表中哪一个元素和对象A相同。先根据hashCode()判断哈希值,若哈希值相同,则再判断equals()返回的结果是否为true,若是,则删除这个元素。

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1

查看全部评分

回复 使用道具 举报
楼上说的很全 补充一点就是 不能修改集合元素中参与hashcode运算的变量值  。如果变量值被修改了 原先已经存入的集合元素hash值就会改变  以后永远也没法最期就行删除等操作   
回复 使用道具 举报
往hashSet集合里添加理论上相同的元素并不是添加不进去 真实的情况是后一个相同的元素覆盖了前一个元素而已。因为hashset底层是通过hashmap集合实现  hashset的add方法的底层是通过hashmap的put(Key,value)方法实现 hashmap的put方法功能特点就是往map里面添加相同的键值对 后面一个后自动覆盖前面的一个  返回false 而这也是hashset集合不能添加相同元素的真正原因
回复 使用道具 举报
好东东,谢谢楼主
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马