- HashMap的几个重要知识点:
- HashMap是
无序且不安全
的数据结构。(线程不安全) - HashMap 是以key–value对的形式存储的,key值是唯一的(可以为null),一个key只能对应着一个value,但是value是可以重复的。
- HashMap 如果再次添加相同的key值,它会覆盖key值所对应的内容,这也是与HashSet不同的一点,Set通过add添加相同的对象,不会再添加到Set中去。
- HashMap 提供了get方法,通过key值取对应的value值,但是HashSet只能通过迭代器Iterator来遍历数据,找对象。
- HashMap是
- HashMap为什么是线程不安全的?举例说明
- put的操作导致数据覆盖:A,B 两个线程将 key-value 插入HashMap 中,线程A 计算出索引后,获取到该桶里面的链表头结点,线程A的时间片用完,然后线程B将记录插入HashMap 中,那么当线程B成功插入之后,线程A再次被调度运行时,它依然持有过期的链表头,如此一来就覆盖了线程B插入的记录,从而造成数据不一致。
- HashMap的get操作可能因为resize而引起死循环(cpu100%),具体分析如下:
- JDK7与JDK8的HashMap区别:
- jdk8中添加了红黑树,当链表长度大于等于8的时候链表会变成红黑树, 小于6时退化为链表,中间数是为了过度使用,防止链表与红黑树之间频繁的转
HashMap与concurrentHashMap的面试题
最新推荐文章于 2023-04-18 10:18:21 发布