package TestDemo;
import java.util.HashSet;
public class Demo3 {
public static void main(String[] args) {
HashSet set = new HashSet();
//不会触发快速失败机制,只有在使用foreach时改变了数据结构才会导致快速失败
// throw new ConcurrentModificationException();
for(Short i =0;i<100;i++){
//这里比较潜藏的点是Short i这里的i被包装了,相当于一个对象;而且这个对象不能再之后得到相同的对象引用,就得不到相应的hash,之后直接删除是删除不了的
set.add(i);
}
System.out.println(set.size());
System.out.println(set.remove(2)); //无效,删除时会再次包装,创建新的对象,找不到对应的hash,达不到预期的删除效果
System.out.println(set.size());
//一下两个例子都是达到了保存同一个hash值的结果,所以添加和删除可以达到预期的效果
HashSet hashSet = new HashSet();
hashSet.add("ekl");
System.out.println(hashSet.size());
hashSet.remove("ekl");
System.out.println(hashSet.size());
HashSet set1 = new HashSet();
Integer integer = new Integer(1);
set1.add(integer);
System.out.println(set1.size());
set1.remove(integer);
System.out.println(set1.size());
}
}
以上求hash值的步骤导致HashMap的putVal的方法的依据var1不同而达不到相应的效果



