HashMap
一.定义
HashMap的数据结构为数组加链式的。
存值的时候根据key值计算出其hashCode的值然后对应数组的索引(索引上存的是一个entry),如果多个不同的key得到的hashCode值相同的话,则存储在数组对应的链上,新插入的(entry)在链的前面。
取值的时候根据key计算出对应的hashCode,找到数组上的索引,然后遍历此索引上的entry链,取出对应的key的value值。
二.ConcurrentHashMap和HashTable的区别
相同点:HashTable和ConcurrentHashMap都是线程安全的,可以适用于高并发的环境。
不同点:HashTable没有使用分段锁的机制,在迭代的时候会将整个map集合都锁定,ConcurrentHashMap使用了分段锁的机制,在迭代时只会锁定map的部分。HashTable防止并发的处理就是在每一个方法上都加了同步锁机制。
三.HashMap并发导致的原因
在hashmap的长度达到零界并准备扩容的时候会调用一个transfer的方法,这个方法中迭代时由于next的值被另外一个线程给改变了,会导致死循环(具体也没咋看明白)
详细请见:https://blog.csdn.net/dgutliangxuan/article/details/78779448