M S*_*ach 4 java hashmap immutability
HashMap hm = new HashMap();
StringBuilder sb = new StringBuilder("test");
hm.put(sb, "second");
// above code gets hacode for sb and places it corresponding bucket
sb.append("123");// with appending of "123", sb hascode will change
System.out.println("element is is" + hm.get(sb));// print "second"
Run Code Online (Sandbox Code Playgroud)
现在hm.get(sb)应该根据新的哈希码搜索存储桶中的密钥.所以它不应该在该桶下获得任何对象并且应该为null.那为什么它会变得"第二"呢?
本StringBuilder类不重写hashCode,所以它继承了hashCode从方法Object.因此,StringBuilder's内容不会影响哈希码,即使你改变它的内容,HashMap它仍然能够找到StringBuilder.
| 归档时间: |
|
| 查看次数: |
60 次 |
| 最近记录: |