Che*_*rry 4 java hashmap hashcode
Cobnsider以下代码:
public static void main (String[] args) {
Map<Number, String> map = new HashMap<Number, String>();
map.put(1L, "test");
System.out.println(map.get(1));
}
Run Code Online (Sandbox Code Playgroud)
为什么HashMap.get返回null?O_o它必须为hashCode函数返回1的任何对象返回值,不是吗?
更新
问题是Map接口接收Object,而不是参数化类型.所以我期望任何对象都可以是一个键,但HashMap实现检查类型与equals,这对我来说是令人惊讶的.
而自动装箱不是问题.我知道,1成为Integer,1L成为Long.但是它们具有相同的哈希码.因此我认为任何实现Map#get都应返回具有相同哈希码的任何Object的值.
你正在放一个1L(Long)的密钥并获得1(Integer)的密钥.
他们不是一回事,所以要小心.
从放置中移除L,或将L添加到get.或者甚至更好,不要把它们写成原语并依靠自动装箱.
| 归档时间: |
|
| 查看次数: |
8617 次 |
| 最近记录: |