hashmap面试题简书_三年php面试题

hashmap面试题简书_三年php面试题这篇文章仅限小编个人的理解,小编不是Java方向的,只是对Java有很高的学习兴趣如果有什么不对的地方还望大佬指点HashMap的底层是数组+链表,(很多人应该都知道了)JDK1.7的是数组+链表(1.7只是一个例子,以前的话也是这样后面就以1.7为例子了)首先是一个数组,然后数组的类型是链表元素是头插法JDK1.8的是数组+链表或者数组+红黑树首先是一个数组,然后数组的类型是链表在链表的元素大于8的时候,会变成红黑树在红黑树的元素小于6的时候会变成链表元素进行尾插HaspM.

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

这篇文章仅限小编个人的理解,小编不是Java方向的,只是对Java有很高的学习兴趣
如果有什么不对的地方还望大佬指点

HashMap的底层是数组+链表,(很多人应该都知道了)
JDK1.7的是数组+链表
(1.7只是一个例子,以前的话也是这样后面就以1.7为例子了)
首先是一个数组,然后数组的类型是链表
元素是头插法
JDK1.8的是数组+链表 或者 数组+红黑树
首先是一个数组,然后数组的类型是链表
在链表的元素大于8的时候,会变成红黑树
在红黑树的元素小于6的时候会变成链表
元素进行尾插

HaspMap的数组默认大小为16
数组也叫做Hash桶
(貌似听说这个值和阿里巴巴Java开发手册好像有点关系)

HashMap元素的下标是
HashCode(元素) & (数组的长度-1)

HashMap的扩容 Resize

扩容的话,这里有一个值叫做loadFactor(阈值),默认值为0.75;
当数组的 元素数量>数组大小(默认16)* loadFactor(默认0.75)
就会触发扩容,扩容是二倍扩容的 (默认是16扩容后就是32)
这时原来每个元素的下标也会改变的(因为数组的长度变了)
然后就要把每个元素重新分配下标,重新加入链表或者红黑树

HashMap线程不安全
在put的时候,Resize(扩容)会造成数据的覆盖
JDK1.7 因为是头插法,可能会造成循环链表
JDK1.8 是尾插法

使用HashMap怎么才能让他线程安全
使用ConcurrentHashMap,
JDK1.7的是分段数组,有Segment锁(继承于ReentrantLock)加速一小段保证并发
JDK1.8 是和HashMap一样了,数组+链表(或者红黑树)
Synchronized(锁)and CAS(compare and swap)
(JVM在1.6对Synchronize的优化很好)
CAS通俗易懂,比较并替换
(CAS是一种无锁算法,CAS有3个操作数,内存值V,旧的预期值A,要修改的新值B。当且仅当预期值A和内存值V相同时,将内存值V修改为B,否则什么都不做)
(无锁化的修改值的操作,他可以大大降低锁代理的性能消耗。这个算法的基本思想就是不断地去比较当前内存中的变量值与你指定的 一个变量值是否相等,如果相等,则接受你指定的修改的值,否则拒绝你的操作。因为当前线程中的值已经不是最新的值,你的修改很可能会覆盖掉其他线程修改的结果。这一点与乐观锁,SVN的思想是比较类似的)

使用HashTable(基本是废弃的)
HashTable就是把HashMap套上了一个Synchronized

Collections.synchronizedMap()包装
使用synchronized 加上,但是这个是对某个Hash桶(数组的某个值)加锁,并不是整个map加锁,在锁定的时候别的线程也可以进行访问

小编暂时就了解这个多了,有什么遗漏的还望大佬评论

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/169547.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 区块链:P2P技术是什么

    区块链:P2P技术是什么摘要:包括比特币、以太坊等在内的去中心化的区块链平台,其底层网络都是采用的P2P技术实现,每个节点都是对等的。而本文,则先通过介绍P2P技术的特点和发展历史,让大家对P2P这个技术的来龙去脉有一个初步的认识和了解。然后在下一篇文章中,我会详细介绍第三代P2P技术(DHT)—Kademlia算法的实现原理。1.p2p的定义P2P是peer-to-peer的简称,又称为点对点技…

    2022年6月19日
    24
  • Pycharm更换pip默认安装源为国内安装源

    Pycharm更换pip默认安装源为国内安装源1、背景:Python里的pip是官方自带的源,国内使用pip安装的时候十分缓慢,所以最好是更换成中国国内的源地址。2、国内pip源清华:https://pypi.tuna.tsinghua.edu.cn/simple/豆瓣:http://pypi.douban.com/simple/阿里:http://mirrors.aliyun.com/pypi/simple/3、具体操作:在pychram中,依次点击“file”–>”setting”依次点击下.

    2022年8月28日
    1
  • 计算机cpu的字母,笔记本电脑CPU型号后缀字母HQ、U、Y含义详解

    计算机cpu的字母,笔记本电脑CPU型号后缀字母HQ、U、Y含义详解我们在选购笔记本的时候,可能优先会看CPU是什么型号的,因为CPU的好坏决定了电脑运算速度的好坏,因此CPU选购十分重要。在笔记本中,不少笔记本CPU型号后缀字母可能不同,那么它们代表什么含义呢?今天蝈蝈就来给大家讲讲笔记本CPU型号后缀字母HQ、U、Y含义,希望对你有帮助!Y:超低压,性能很弱功耗很低相比低压CPU,名字中有“Y”的是性能更弱的超低压CPU。在第七代处理器之前,超低压的命名方式为…

    2022年6月16日
    75
  • Scrapy ip代理池

    Scrapy ip代理池一、概述在众多的网站防爬措施中,有一种是根据ip的访问频率进行限制,即在某一时间段内,当某个ip的访问次数达到一定的阀值时,该ip就会被拉黑、在一段时间内禁止访问。应对的方法有两种:1.降低爬虫的爬取频率,避免IP被限制访问,缺点显而易见:会大大降低爬取的效率。2.搭建一个IP代理池,使用不同的IP轮流进行爬取。环境说明操作系统:centos7.6ip地址:192.1…

    2022年6月9日
    46
  • 如何为pycharm配置解释器_python解释器加入pycharm

    如何为pycharm配置解释器_python解释器加入pycharm我们需要提前下载好python解释器解释器可以在Python解释器官网下载,这里我下载的是3.8.8版本的1、在我们安装好pycharm的时候,并不是直接可以用的,我们还需要配置解释器,不配置解释器的话,就会出现下面这种情况。此时,小伙伴们莫慌,只要我们配置好解释器就可以了。2、首先点击上图中“ConfigurePythonInterpreter”,之后Pycharm就会自动定位到“ProjectInterpreter”这个位置,如下图所示,该界面是Pycharm的设置窗口之一,专门用

    2022年8月26日
    3
  • 计算机组成原理知识点总结「建议收藏」

    计算机组成原理知识点总结「建议收藏」快考试了,计算机组成原理这门课学的真不咋地,自己从头看书也感觉看不下去,于是找了哈工大的慕课来学习,在这里记记重点——————————————————————————————–计算机系统可分为硬件和软件硬件:计算机的实体,如主机,外设等。软件:由具有各科特殊功能

    2022年5月31日
    38

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号