HashSet 是Set 接口的一个实现类,它所存储的元素是不可重复的,并且元素都是无序的。当向HashSet 集合中添加一个对象时,首先会调用该对象的hashCode()方法来计算对象的哈希值,从而确定元素的存储位置,如果此时哈希值相同,再调用对象的equals()方法来确保该位置没有重复元素。Set 集合与List 集合存取元素的方式都一样,此处不再详细讲解。
【例7.11】下面通过一个案例来演示HashSet 集合的用法,如文件7-11 所示。
文件7-11 Example11.java
执行结果
HashSet 集合之所以能确保不出现重复的元素,是因为它在存入元素时做了很多工作。当调用HashSet 集合的add()方法存入元素时,首先调用当前存入对象的hashCode()方法获得对象的哈希值,然后根据对象的哈希值计算出一个存储位置。如果该位置上没有元素,则直接将元素存入;如果该位置上有元素存在,则会调用equals()方法让当前存入的元素依次和该位置上的元素进行比较。见如果返回的结果为false,就将该元素存入集合;返回的结果为true,则说明有重复元素,就将该元素舍弃。整个存储的流程如图7.4 所示。
图7.4 存储流程
【例7.12】下面通过一个案例来进行演示HashSet 集合的用法,如文件7-12 和7-13 所示。
文件7-12 Example12.java
(www.xing528.com)
执行结果
[2:咏霞,2:咏霞,1:光庆]
在例7.12 的运行结果中出现了两个相同的学生信息“儒明”,这样的学生信息应视为重复元素,不允许同时出现在hashset 集合中。为了解决这一问题,请参看例7.13 代码。
【例7.13】通过重写hashcode()和equals()方法,去掉hashset 集合中重复元素,如文件7-13所示。
文件7-13 Example13.java
执行结果
【1:光庆,2:儒明】
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。