一、先来看一段代码
HashSet<String> set =new HashSet<>();
set.add("Tom");
set.add("Tom");
set.add(new String("Tom"));
System.out.println(set.size());
其输入结果为
1
二、通过上述结果,我们发现HashSet中的add()方法不能重复添加内容相同的String类型的值,那它的原因是什么呢?我们来看看它的源代码。
1、HashSet对象创建时会创建一个HashMap对象。
public HashSet() {
map = new HashMap<>();
}
2、HashSet对象在调用add()方法时会将参数存入HashMap的key中。
//下面为HashSet的add()方法
public boolean add(E e) {
return map.put(e, PRESENT)==null;
}
//下面为HashMap的put方法
public V put(K key, V value) {
return putVal(hash(key), key, value, false, true);
}
3、HashMap中的hash()