总结
上一篇文章讲了一些我理解的HashMap,这里我们总结概括一下,包括和其他集合的比较
1.HashMap特点
- 底层是散列表+红黑树。初始容量为16,装载因子为0.75,每次扩容2倍
- 允许为null,存储无序
- 非同步,也就是说是线程不安全的
- 散列表容量大于64且链表大于8时,转成红黑树
- Key的哈希值会与该值的高16位做异或操作,进一步增加随机性
- 当散列表的元素大于容量*装载因子时,会再散列,每次扩容2倍
- 如果hashCode相同,key不同则替换元素,否则就是散列冲突
2.与ConcurrentHashMap比较
- 底层是散列表+红黑树,支持高并发操作
- key和value都不能为null
- 线程是安全的,利用CAS算法和部分操作上锁实现
- get方法是非阻塞,无锁的。重写Node类,通过volatile修饰next来实现每次获取都是最新设置的值
- 在高并发环境下,统计数据(计算size…等等)其实是无意义的,因为在下一时刻size值就变化了。
网友评论