HashMap put存值调用hashcode判断key是否冲突,如果冲突就会在当前数组的bucket以链表的形式进行存值。但是我们在使用的时候当t两个相同的key明显是覆盖之前的key的value; 当两个相同的key 它的hashcode也必然相等 也就是这一点是冲突的。懂的大神能否解答下,感谢感谢
解决方案 »
- java项目出现的问题
- 和我一起学习hibernate-1
- 求救了,急。。。。。。。。。。。。。。。。。
- ExtJs+Struts2中Login的时候遇到的问题
- 字符串问题。。。字符串高手进
- 为什么mysql登陆后运行命令出现->
- 一台服务器上怎么 装两个tomcat?
- JAVA程序调用LINUX命令获取版本信息并输出到文件怎么做
- 解决tomcat下载问题
- C/S 模式的程序移植到Web Services的问题?
- 上线java应用cpu异常通过mat分析后的结果疑问
- tomcat 启动报错 loader constraint violation javax/servlet/ServletContext
关于新值覆盖旧值,是key相等的情况下(即hashcode相等),更新value。
总之map存数据,先算key的hashcode,
然后用hashcode判断应该放到数组的哪个bucket,
如果那个bucket为空,则直接放进去,
而如果那个bucket不为空,则一一遍历bucket里的key,
遍历的同时,会使用equals方法判断是否与当前key相等,
如果有相等的,则会用当前key带的value覆盖原来那个key的value,
如果没相等的,则吧当前key挂到这个bucket的链表上,
当这个链表大小大于等于8,会变成红黑树,
当这个红黑树大小重新降下来,小于等于6,就变回链表,