减少new创建对象的开销,保证对于相同的i和相同的j能够得到相同的hashcode,那么就没有问题。
其实你查看一下hashmap的源代码就知道了,hashmap其实是根据key的hashcode计算对象存放位置的
其实你查看一下hashmap的源代码就知道了,hashmap其实是根据key的hashcode计算对象存放位置的
解决方案 »
- 如果将一个int型的数字转换成长度为4的字节串?????
- 一个java新手 一个简单的问题!!
- operator > cannot be applied to java.math.BigDecimal,int怎么解决
- ORACLE里一个字段是NUMBER型的,在ResultSet中可以直接用getString吗?
- 小弟求助 什么软件反编译class文件比较好
- 一个小问题 如何关闭当前窗口
- 小调查:你是用VJ++还是Jbuilder,有兴趣签个名!
- 寻《Complete Java 2 Certification Study Guide》第二章电子版文件2825c02.pdf
- 没办法了,高分找longhh、iloveyouonlyonce(唱首情歌麻一麻,吞杯毒酒辣一辣)、Kert_ake几位大哥!
- 初学者对于java继承、多态,子类对象的内存分配的一些问题,百度了好多,但感觉没有系统的,在此提问,希望前辈们传到授业解惑
- 正则表达式堆栈溢出怎么破
- 很纠结的问题——Java中的余数为什么可以为负?
需要保证对应不同的i和j,hashcode必须唯一码?
看了一下HashMap的源码,存和取都是比较hashCode并且判断是否同一对象,若不是再调用equals方法
按照lz的想法,HashMap的每个Entery的key的内存地址是一样的,所以调key的equals方法永远是跟最新放进去的key是相等的,但是Entry的hash不一样,所以放还是没问题的;那么取的时候,如果跟存的是同一个对象,找到对应的hash,然后就找到对应的Entry,value也就获得了。所以强调是同一对象,如果存和取不是同一对象,那么虽然能找到hash相等的,除了最后put进去的,其他恐怕就get不到了
ps:如果是同一对象,equals方法也没要重写了
需要保证对应不同的i和j,hashcode必须唯一码?如果hashcode不一样,这两个实例必须不同。但是两个不同的实例可以用相同的hashcode
1.找到第几个链表,即数组的第几个位置
2.找到该链表,然后遍历链表查看是否存在该value对于第一步,hashMap内部是根据key的hashcode来找的,所以要重写hashcode方法;
对于第二步,遍历时是比较key,查找是否有相同的key,而比较又会用到equals方法,所以要重写equals方法。