美文网首页
【16】 hashmap

【16】 hashmap

作者: 不怕天黑_0819 | 来源:发表于2020-07-22 09:11 被阅读0次

hashmap 1.7 和1.8的区别

1.7中采用数组+链表,1.8采用的是数组+链表/红黑树,即在1.7中链表长度超过一定长度后就改成红黑树存储。 

1.7扩容时需要重新计算哈希值和索引位置,1.8并不重新计算哈希值,巧妙地采用和扩容后容量进行&操作来计算新的索引位置。 

1.7是采用表头插入法插入链表,1.8采用的是尾部插入法。 

在1.7中采用表头插入法,在扩容时会改变链表中元素原本的顺序,以至于在并发场景下导致链表成环的问题;在1.8中采用尾部插入法,在扩容时会保持链表元素原本的顺序,就不会出现链表成环的问题了。

hashmap全家桶

hashmap 源码解析

hashmap

深拷贝和浅拷贝

hashmap 面试常问考点

继承不同,Hashtable是线程安全的,方法都为同步方法synchronized。Collections.synchronizedMap()是在方法块上加锁。
hashtable 和Collections.synchronizedMap()的区别

在jdk1.7中是采用Segment + HashEntry + ReentrantLock的方式进行实现的,而1.8中放弃了Segment臃肿的设计,取而代之的是采用Node + CAS + Synchronized来保证并发安全进行实现。
JDK1.8的实现降低锁的粒度,JDK1.7版本锁的粒度是基于Segment的,包含多个HashEntry,而JDK1.8锁的粒度就是HashEntry(首节点)

JDK1.8版本的数据结构变得更加简单,使得操作也更加清晰流畅,因为已经使用synchronized来进行同步,所以不需要分段锁的概念,也就不需要Segment这种数据结构了,由于粒度的降低,实现的复杂度也增加了

JDK1.8使用红黑树来优化链表,基于长度很长的链表的遍历是一个很漫长的过程,而红黑树的遍历效率是很快的,代替一定阈值的链表,这样形成一个最佳拍档

在1.8中ConcurrentHashMap的get操作全程不需要加锁,这也是它比其他并发集合比如hashtable、用Collections.synchronizedMap()包装的hashmap;安全效率高的原因之一。

get操作全程不需要加锁是因为Node的成员val是用volatile修饰的和数组用volatile修饰没有关系。

数组用volatile修饰主要是保证在数组扩容的时候保证可见性。

ConcurrentHashMap如何保证线程安全?

相关文章

  • HashMap LinkHashMap HashTable 区别

    HashMap LinkHashMap HashTable 特性 HashMap 线性不安全 初始大小16,负载因...

  • HashMap原理解析

    HashMap 原理解析 hashmap构造hashmap 默认的初始数组容量大小为16,默认加载因子为0.75,...

  • JUC-Set

      HashSet构造函数:默认容量为16的HashMap。(底层是HashMap)   HashSet的add方...

  • HashMap总结

    总结: 1.HashMap的默认大小为16,即桶数组的默认长度为16; 2.HashMap的默认装载因子是0.75...

  • 【16】 hashmap

    hashmap 1.7 和1.8的区别 hashmap全家桶 hashmap 源码解析 hashmap hashm...

  • 基础积累:HashMap源码解析

    1.hashmap中hash原理 从源码可知hashmap对int的32位进行了高位16位与地位16位的异或操作,...

  • HashMap初始容量剖析

    问题: 确定只装载10个元素, HashMap初始容量多少是最佳? 答案: 16 目的: 防止HashMap频繁扩...

  • HashMap 的底层原理

    浅谈HashMap 的底层原理HashMap的默认容量为何为16?为何是2的整数倍?面试必备

  • HashMap源码分析

    HashMap源码分析 总结 hashMap中用数组存储数据。初始值是16。每次扩容2倍。当数据>12(0.75 ...

  • HashMap源码笔记

    hashmap查找 getNode() 计算hash key.hashCode() ^ (h>>>16) 高...

网友评论

      本文标题:【16】 hashmap

      本文链接:https://www.haomeiwen.com/subject/nfzakktx.html