博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HashMap
阅读量:4091 次
发布时间:2019-05-25

本文共 1124 字,大约阅读时间需要 3 分钟。

 

 

HashMap的基本特性?谈谈你对HashMap的理解?

HashMap是Java常用的集合之一,存的是键值对,它继承了AbstractMap,实现了Map、Cloneable(可被克隆)、Serializable接口(可被序列化)。

它是散列表结构的一种实现,其增删改查操作都是O(1)级别。

默认容量为16,

扩容因子是

 

HashMap的底层结构?

Java7中,HashMap的底层数据结构是由数组+链表实现的。而在Java8中,HashMap的底层数据结构则是由数组+链表+红黑树实现的,当一个桶存储的链表长度大于等于8时,会将链表转换为红黑树。

之所以要加入红黑树,是因为在某些极端情况下,几乎所有元素可能都存放在同一个桶(数组索引是链表的表头)的链表中,此时HashMap就相当于一个单链表,相关操作的时间复杂度退化成O(n)。

 

HashMap的扩容?

为什么容量总是2的幂次方?

 

 

HashMap和LinkedHashMap的区别?

有序性

 

 

HashMap和HashTable的区别?

(1)Hashtable不支持null作为key和value,HashMap支持

(2)Hashtable是线程安全的,它里面几乎所有方法都是用Synchronized修饰的同步方法;HashMap则是线程不安全的

(3)HashMap的迭代器是fail-fast迭代器

(4)HashMap不能保证随着时间的推移,Map中的元素次序保持不变

 

HashMap线程不安全的危害?

(1)多线程同时普通时,可能丢失值

(2)多线程扩容时,会出现环状结构,造成死循环 。。。

 

如何解决HashMap的线程不安全?

(1)使用Collections的synchronizedMap()方法对其进行包装

(2)直接使用线程安全的ConcurrentHashMap

两种方式的区别主要是:前者在同步时会锁住整张表,而ConcurrentHashMap会使用自身的同步机制,比如分段锁或CAS。

 

谈一谈ConcurrentHashMap?

ConcurrentHashMap是在JDK1.5引入的,是HashMap的线程安全版本,其使用方式与HashMap一样,底层结构在Java7和Java8时都与HashMap相同,只是加入了线程安全的保障而已。

 

ConcurrentHashMap是如何保证线程安全的?

Java7的ConcurrentHashMap采用分段锁机制:

Java8改用CAS算法+Synchronized关键字来保证线程安全:

之所以抛弃分段锁,是因为:

 

说说对CAS算法的理解?

所谓CAS算法,即Compare And Swap。 。。。。

 

 

 

 

 

 

 

 

 

 

转载地址:http://bfnii.baihongyu.com/

你可能感兴趣的文章
程序员用 AI 修复百年前的老北京视频后,火了!
查看>>
漫话:为什么你下载小电影的时候进度总是卡在 99% 就不动了?
查看>>
我去!原来大神都是这样玩转「多线程与高并发」的...
查看>>
当你无聊时,可以玩玩 GitHub 上这个开源项目...
查看>>
B 站爆红的数学视频,竟是用这个 Python 开源项目做的!
查看>>
安利 10 个让你爽到爆的 IDEA 必备插件!
查看>>
自学编程的八大误区!克服它!
查看>>
GitHub 上的一个开源项目,可快速生成一款属于自己的手写字体!
查看>>
早知道这些免费 API,我就可以不用到处爬数据了!
查看>>
利用蒙特卡罗法,国外老哥成功制造出 100% 投篮命中的篮板!
查看>>
卧槽!VSCode 上竟然也能画流程图了???
查看>>
如何高效阅读 Spring 源码?你需要这个!
查看>>
86 岁还在录网课:MIT 老教授最新「线性代数」课程正式对外开放!
查看>>
李飞飞新动向:独立董事身份加入 Twitter 董事会!
查看>>
开发神器:帮你快速找到免费开放的 API 接口!
查看>>
向 Excel 说再见,神级编辑器统一表格与 Python!
查看>>
95 后天才博士生曹原连发两篇 Nature,网友:这才是真正的后浪!
查看>>
Spring Boot + Dataway :接口不用写,配配就出来?
查看>>
重磅发布:百度免费开放 AI 深度学习高级实践课!
查看>>
Google 6 面,最终还是挂了…
查看>>