Java HashMap那些事

1.谈谈你对hashmap的理解

    hash对应数据结构的哈希表,哈希表是这样的一个数据结构,提供常数级的增删改查操作。

是一种用空间换时间的数据结构

2. hashmap底层原理的实现

  底层原理是数组构成的哈希桶,通过计算元素的哈希值,算出元素在哈希数组里的索引,从而

快速定位元素

3.hashmap如何解决冲突的

 hashmap解决冲入的方法有多种,常见的有链式地址法,通过数组+链表的方式

,二次哈希,碰撞后再进行一次哈希。开放地址法,在冲突后,按照一定的次序,从哈希表找到一个空闲的单元

4.hashmap是线程安全的吗

 hashmap不是线程安全的。

5.线程安全的hashmap

hashmap不是线程安全的,多个线程并发修改哈希表时,有存在并发扩容的情况,此时容易造成死循环

线程安全的hashmap concurrent_map实现

对于jdk1.7来说,concurrenthashmap的实现是分段锁+hashentry+unsafe.

对于jdk1.8来说,实现则是synchronized+CAS+Node+Unsafe

put操作: 1.7:先定位segment,再定位桶,put全程加锁,没有获得锁的线程提前找到桶的位置,并自选64次获取锁,超过则挂起

                1.8 移除了segment锁,直接定位到桶,拿到first节点进行判断,为空则cas插入,为-1表示在扩容,跟着一起扩容,else则加锁put

get操作,由于声明为volatile,保证了修改的可见性,不用加锁

resize,1.7 搬到单线程中执行

             1.8 支持并发扩容。

你可能感兴趣的:(Java HashMap那些事)