浏览 1339 次
锁定老帖子 主题:Java-HashMap的一点讨论
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2012-11-15
代码如下:
public static void main(String[] args) { Map m = new HashMap(); Object o1 = new Integer(1); Object o2 = new Long(1); m.put(o1, 1); m.put(o2, 2); System.out.println(m.get(1)); System.out.println(m.get(Long.valueOf(1))); System.out.println(o1.hashCode()); System.out.println(o2.hashCode()); System.out.println(m.toString()); }
在看我Debug时的图片: 断点处 debug查看内容 好了,想问大家不要去写代码,告诉我程序最后的输出是多少? 答案看附件图片4
至于为什么,请看源码: 自己看,我不多说什么,欢迎留言讨论。
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2012-11-16
最后修改:2012-11-16
楼猪是要考察哪点?
我感觉可能是对hashcode的理解吧。(虽然System.out.println(o2.hashCode()); 我确实不记得了,以为和Integer一致) Integer 是int的包装类,所以hashcode应该==其本身 Long 我原以为同Integer是一样的(虽然这个例子的结果都是1其实不然,楼猪这个例子还不能完全说明问题)Long的hash是把负数 and 0 处理成0,正数和Integer原理一致。 用这个验证既可: System.out.println(new Long(-1).hashCode()); System.out.println(new Long(1).hashCode()); |
|
返回顶楼 | |
发表时间:2012-11-16
cectsky 写道 楼猪是要考察哪点?
我感觉可能是对hashcode的理解吧。(虽然System.out.println(o2.hashCode()); 我确实不记得了,以为和Integer一致) Integer 是int的包装类,所以hashcode应该==其本身 Long 我原以为同Integer是一样的(虽然这个例子的结果都是1其实不然,楼猪这个例子还不能完全说明问题)Long的hash是把负数 and 0 处理成0,正数和Integer原理一致。 用这个验证既可: System.out.println(new Long(-1).hashCode()); System.out.println(new Long(1).hashCode()); 说明两点: 1. jdk自带的hashmap是用数组链表实现的 2. hashcode值相同只是决定了数组的下标,而key对象才是真正决定map的映射的 |
|
返回顶楼 | |