我發現hashmap的一些奇怪行爲在下面的類中。Java中HashMap的奇怪行爲
class Employee {
private String a;
private int b;
public Employee(String a, int b) {
this.a = a;
this.b = b;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((a == null) ? 0 : a.hashCode());
result = prime * result + b;
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Employee other = (Employee) obj;
if (a == null) {
if (other.a != null)
return false;
} else if (!a.equals(other.a))
return false;
if (b != other.b)
return false;
return true;
}
public static void main(String[] args) {
HashMap<Employee,Integer> map = new HashMap<>();
for(int i = 0; i < 13; i++) {
map.put(new Employee(i + "", i), i + i);
}
}
}
當我使用新的Employee(「」,i)的作爲鍵在地圖存儲數據時,它工作正常和調整大小12節點插入後地圖。但在使用 新員工(i +「」,i)作爲鍵時,它顯示出奇怪的行爲,使用此鍵添加第10個元素時,它將地圖的大小調整爲16到32,並添加第11個元素,然後再次調整大小映射到64. 如果您發現此行爲的任何原因請幫助。
你是如何觀察這種行爲?用調試器?你可能在談論內部的大小,而不是地圖中的實際數量,對吧? –
是的,在調試模式下,你可以檢查添加第10個元素,它調整大小從16到32 ... –