HashMap面试回答
首先讲出1.7和1.8的区别:
1.7:底层数据结构是数组加链表,扩容采用的是头插法
1.8:底层数组加链表加红黑树,采用尾插法
扩容机制:负载因子0.75,创建一个空数组rehash,线程不安全,扩容每次都是2的倍数,最小容量16,最大2^30,原因:方便位运算,均匀分布,线程不安全,会出现数据覆盖问题,在1.7中resize过程中因为头插法可能会产生环。
线程安全的替代:HashTable,ConcurrentHashMap,Collections.synchronized().
ConcurrentHashMap在1.7使用的是分段锁机制,在1.8中使用的是synchronized+CAS
CAS存在的问题:占用cpu开销,ABA问题(通过加版本号或标志解决)

查看14道真题和解析