![6ee8a099641d59bf78c4c0ecf2cc60ea.png](https://img-blog.csdnimg.cn/img_convert/6ee8a099641d59bf78c4c0ecf2cc60ea.png)
欢迎关注我的专栏:里面不定期分享Java架构技术知识点及解析,还会不断更新BATJ面试专题,欢迎大家前来探讨交流,如有好的文章也欢迎投稿。注意专栏简介的介绍获取最新一线大厂Java面试题总结资料!
java架构经验交流 zhuanlan.zhihu.com![f1e2cb477ba321bca8344c192d83f493.png](https://img-blog.csdnimg.cn/img_convert/f1e2cb477ba321bca8344c192d83f493.png)
1.常用的实现类结构
一、HashMap
实现了Map、Cloneable、Serializable接口,继承了AbstractMap类
public class HashMap<K,V> extends AbstractMap<K,V>
implements Map<K,V>, Cloneable, Serializable
/**
* Map接口: 实现键值对,Map接口规定了一个key对应一个value
* HashMap使用该接口用来替换Dictionary类
*
* AbstractMap类: 继承Map的抽象类,减少Map操作的实现
*
* Cloneable接口: 可以显示的调用Object.clone()方法,合法的对该类
* 实例进行字段复制
*
* Serializable接口: 实现该接口后,该类可以被序列化和反序列化
*/
1.HashMap是否线程安全?
HashMap是线程不安全的,在并发的环境下可以使用ConcurrentHashMap。
2.HashMap的内部实现
内部实现:在JDK1.8之前是数组+链表,JDK1.8之后是数组+链表+红黑树
加入红黑树的原因:JDK1.8之前HashMap使用的是数组加链表,由于哈希函数不能百分百的让元素均匀的分布,就会造成有大量的元素存入同一个index(桶)下,这样index就形成了一条很长的链表,由此元素的遍历的时间复杂度为O(n),失去了HashMap的优势,加入了红黑树,查找的时间复杂度为O(log n),实现了优化
数组的特点:查找快,时间复杂度是O(1),增删慢,时间复杂度是O(n)
链表的特点:查找慢,时间复杂度是O(n),增删快ÿ