上篇分别说了JDK1.7和1.8版本的HashMap具体源码解析, 但这俩者具体是有啥区别?且听这回详解
不管是1.7还是1.8的HashMap,首先我们要明确HashMap是线程不安全的!!!
数据结构:JDK1.7采用的是数组+单链表结构;JDK1.8采用数组+链表+红黑树结构
数据插入操作:JDK1.7是采用头部插入数据,在get查询的时候能够快速的查找到数据,但是因为采用头插法可能会出现环形链表甚至死锁的现象;JDK1.8因为具有红黑树的结构,所以是采用尾部插入数据,能够避免头部插入带来的问题
扩容时机:JDK1.7是先判断是否需要扩容,然后再put,JDK1.8是先put后判断是否需要扩容
扩容操作:JDK1.7扩容时是将老数组的数据重新hash写入到新数组中,JDK1.8中键的hash值是不会改变的,是根据(hash&oldCap)==0进行链表分散