对hashmap与hashcode()equals()的理解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对hashmap与hashcode()equals()的理解相关的知识,希望对你有一定的参考价值。

1.equals方法没被重写的时候   比较的只是对象的地址  重写之后 比较的才是对象里的内容

2.重写equals的时候 务必需要重写hashcode 不然在用到容器的时候 会出现问题 因为容器会去判断新加入的对象的hashcode 在集合中是否存在 再去判断对象的内容

3.hashmap的理解

hashmap其实就是数组+链表   这里所谓的链表 无非就是 在hashmap里定义了一个静态Node类 这个类有Node next这个引用 可以指向当前下一个在当前索引下标下的Node节点

进行put的时候 会根据传入的key进行hash(key.hashcode())  然后算出索引 去数组里找

1.如果没找到下标 那么直接addentry()

2.存在下标的话(其实就是链表的第一个元素),判断是否存在相同的key 相同那么就覆盖原来的value,不同就是直接放在链表的第一个,为什么放在第一个,那是因为定义的Node节点,属就是Node next

3.同时有两个线程put的时候 一旦超出数组长度  会进行resize双倍扩容 此时存在对table这个公共变量资源 进行竞争  所以存在多线程安全问题  

所以在判断高并发 高访问的时候 可以考虑用concurrenthashmap

以上是关于对hashmap与hashcode()equals()的理解的主要内容,如果未能解决你的问题,请参考以下文章

composite key 与hashcode,equals

HashSet 与 HashMap

hashmap中equals() 和hashcode(),请教

HashMap, equals, hashCode

HashMap中的equals()和hashCode()

关于HashMap自定义key重写hashCode和equals的问题