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 支持并发扩容。