class WrongHashCode{
public int code=0;
@Override
public int hashCode(){
return code;
}
}
public class Rehashing {
public static void main(String[] args) {
//Initial capacity is 2 and load factor 75%
HashMap<WrongHashCode,String> hashMap=new HashMap<>(2,0.75f);
WrongHashCode wrongHashCode=new WrongHashCode();
//put object to be lost
hashMap.put(wrongHashCode,"Test1");
//Change hashcode of same Key object
wrongHashCode.code++;
//Resizing hashMap involved 'cause load factor barrier
hashMap.put(wrongHashCode,"Test2");
//Always 2
System.out.println("Keys count " + hashMap.keySet().size());
}
}
所以,我的问题是:为什么在调整哈希映射大小后(据我所知,这涉及到重新哈希键),我们仍然有2个键在keySet中,而不是1个(因为现有的KV对的键对象相同)?
HashMap
文档中指定的要求冲突。编译器不必强制执行每一个Javadoc,JVM也不必如此。 - user207421