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问题(通过加版本号或标志解决)

全部评论

相关推荐

04-17 23:48
西北大学 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务