根据hashcode原理,往HashSet里增加元素,其本质就是把元素作为key添加到HashMap上。
所以,判断增加的元素是否重复,就是判断key是否重复 1. 如果hashcode 不一样,一定不重复 2. 如果hashcode 一样, 再使用equals进行比较。 倘若equals也一样,则重复 倘若equals不一样,则不重复 参考分析HashMap的性能 package collection;
import java.util.HashSet;
public class TestCollection {
public static void main(String[] args) {
HashSet<String> names = new HashSet<String>();
//gareen 对应的hashcode是1001 (其实不是,为了便于理解,假设是1001)
//HashSet内部是HashMap,所以是本质上是map.put("gareen",PRESENT);
//map是空的,所以一定加的进去
names.add("gareen");
//temoo的hashcode是1004, 1004这个位置,没有元素,顺利加入
names.add("temoo");
//db的hashcode是1008, 1008这个位置,没有元素,顺利加入
names.add("db");
//annie的hashcode是1008, 1008这个位置有db了
//把annie和db进行equals比较,不一样,即不重复,也可以加进去
names.add("annie");
//gareen 对应的hashcode是1001,1001这个位置以及有元素,并且key也是 "gareen"
//equals也一样,即代表重复,所以"gareen"再加入,就加不进去了
names.add("gareen");
}
}
HOW2J公众号,关注后实时获知最新的教程和优惠活动,谢谢。
![]()
提问之前请登陆
提问已经提交成功,正在审核。 请于 我的提问 处查看提问记录,谢谢
|