1.8之后hashmap的数据结构发生了变化,从之前单纯的数组+链表结构变成了数组+链表+红黑树。
也就是说在JVM存储hashmap的K-V时,仅仅通过key来决定每一个entry的存储槽位(Node[]中的index)。并且Value以链表的形式挂在对应的槽位上(1.8以后如果value长度大于8则转化为红黑树)。
但是hashmap1.7和1.8中都没有任何同步操作,容易出现并发问题,甚至出现死循环,导致系统不可用。
解决方案是jdk的ConcurrentHashMap, 位于java.util.concurrent下,专门解决并发问题。