面试篇:HashMap

news2024/11/20 8:30:49

1.问:了解过红黑树吗?它有什么性质?

  答:红黑树是一种自平衡的二叉搜索树,他的查找,添加和删除的时间复杂度都为O(logN)。

        他有以下五种性质:

        1.红黑树的节点只有红色或者黑色两种颜色

        2.红黑树的根节点为黑色

        3.红黑树的叶子节点都是黑色的空节点

        4.红黑树的红色节点的子节点都是黑色

        5.从根节点到任意叶子节点的路径上,黑色节点数一致

2.问:什么是散列表?

答:散列表,又叫哈希表,是一个根据键来直接访问在内存存储位置的值的数据结构。

        它是由数组演化而来的,利用了数组可以按照下标进行随机访问数据的特征。

3.问:什么是哈希冲突(散列冲突)?

答:哈希冲突,指的是不同的key在进行hash运算的时候被映射到同一个索引位置

4.问:如何解决哈希冲突?

答:1.开放地址法,如果产生了哈希冲突,则以当前地址为基地址,根据再寻址的方法(探查序列),去寻找下一个地址,若发生冲突再去寻找,直至找到一个为空的地址为止。所以这种方法又称为再散列法。

        2.拉链法, 数组每个下标位置都称为一个桶,当产生hash冲突的时候,会把冲突元素存放入该下标的链表或者红黑树中。

5.问:HashMap为什么引入链表?

答:因为hashmap在进行put操作时,可能会产生hash冲突,这时候就需要把冲突的元素存放在对应数组下标的链表中。

6.问:HashMap为什么会引入红黑树?

答:因为如果链表长度大于8,其遍历速度较慢,此时可以引入红黑树,增加遍历的速度

7.问:为什么不一开始就使用红黑树?

答:因为树的维护成本比较大,毕竟红黑树在插入的时候要进行旋转,所以在链表短的情况下,会优先使用链表。

8.问:什么时候链表会转换成红黑树?

答:当链表的长度>8且数组的长度>64时,会把链表转换为红黑树

       当链表长度>8,数组长度<64时,会进行扩容

       当树的节点<6时,会退化成链表

9.问:jdk1.7和jdk1.8的HashMap有什么区别?

答:在jdk1.7时,采用的是数组+链表的方式,也就是会创建一个链表数组,每个数组的格子都是一个链表,当产生哈希冲突时,直接将冲突的元素添加到链表中即可。

        在jdk1.8时,在解决哈希冲突时,采用的是数组+链表+红黑树的方式,当链表的长度大于阈值(默认为8)且数组长度>64时,会转换成红黑树,以减少搜索时间。

10.问:讲一讲HashMap进行put操作的过程

答:在第一次进行put时,会初始化一个长度为16的数组,然后进行hash运算并根据索引插入对应位置。

       在非第一次进行put时,会先根据key计算索引,并判断该索引处是否为空(table[i] == null ?)

        如果是,则直接插入,如果不是,则判断key是否存在,存在则覆盖并插入,不存在则继续判断:

        (1). 如果当前索引处是红黑树,则进行红黑树的添加逻辑

        (2).否则就是链表,则遍历链表,看是否存在该key,如果存在则覆盖插入,不存在则在链表中插入新节点,最后判断链表长度是否>8,是的话则转换为红黑树,在红黑树中插入。

11.问: 讲一讲HashMap的扩容机制

答:第一次扩容时会判断oldcap>0 ? 不成立则说明是第一次添加数据,直接初始化数组容量为16,且阈值为16*0.75 = 12 (0.75为负载因子)。

        当判断oldcap>0成立,则进行扩容,扩容后的大小为原来大小的两倍。并且要遍历数组,把旧数组中的数据挪动到新数组中,具体为:

(1).对没有hash冲突的值,直接计算新数组的索引位置

(2).否则,如果是红黑树,则直接进行红黑树的添加逻辑

(3).如果是链表,则判断(e.hash & oldcap == 0) 是否成立,成立则留在原始位置,不成立则

         新位置 = 旧位置+原始容量(oldcap)

 

12.问:为什么负载因子是0.75?

答:这是根据概率学上的泊松分布来决定的,当负载因子为0.75时,时间和空间最佳权衡。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1547465.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java Web线上网游商品交易平台用eclipse定制开发mysql数据库BS模式java编程jdbc

一、源码特点 jsp线上网游商品交易平台是一套完善的web设计系统&#xff0c;对理解JSP java SERLVET mvc编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0,eclipse开发&#xff0c;数据库为Mysql5.0…

Charles for Mac 强大的网络调试工具

Charles for Mac是一款功能强大的网络调试工具&#xff0c;可以帮助开发人员和测试人员更轻松地进行网络通信测试和调试。以下是一些Charles for Mac的主要特点&#xff1a; 软件下载&#xff1a;Charles for Mac 4.6.6注册激活版 流量截获&#xff1a;Charles可以截获和分析通…

QT+Opencv+yolov5实现监测

功能说明&#xff1a;使用QTOpencvyolov5实现监测 仓库链接&#xff1a;https://gitee.com/wangyoujie11/qt_yolov5.git git本仓库到本地 一、环境配置 1.opencv配置 将OpenCV-MinGW-Build-OpenCV-4.5.2-x64文件夹放在自己的一个目录下&#xff0c;如我的路径&#xff1a; …

OriginBot智能机器人开源套件

详情可参见&#xff1a;OriginBot智能机器人开源套件——支持ROS2/TogetherROS&#xff0c;算力强劲&#xff0c;配套古月居定制课程 (guyuehome.com) OriginBot智能机器人开源套件 最新消息&#xff1a;OriginBot V2.1.0版本正式发布&#xff0c;新增车牌识别&#xff0c;点击…

Spring Cloud 八:微服务架构中的数据管理

Spring Cloud 一&#xff1a;Spring Cloud 简介 Spring Cloud 二&#xff1a;核心组件解析 Spring Cloud 三&#xff1a;API网关深入探索与实战应用 Spring Cloud 四&#xff1a;微服务治理与安全 Spring Cloud 五&#xff1a;Spring Cloud与持续集成/持续部署&#xff08;CI/C…

政安晨:【Keras机器学习实践要点】(五)—— 通过子类化创建新层和模型

政安晨的个人主页&#xff1a;政安晨 欢迎 &#x1f44d;点赞✍评论⭐收藏 收录专栏: TensorFlow与Keras实战演绎机器学习 希望政安晨的博客能够对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff01; 介绍 本文将涵盖构建自己的子类化层和模型所…

使用Spark单机版环境

在Spark单机版环境中&#xff0c;可通过多种方式进行实战操作。首先&#xff0c;可使用特定算法或数学软件计算圆周率π&#xff0c;并通过SparkPi工具验证结果。其次&#xff0c;在交互式Scala版或Python版Spark Shell中&#xff0c;可以进行简单的计算、打印九九表等操作&…

ABAP - 上传文件模板到SMW0,并从SMW0上下载模板

upload file template to SMW0 and download the template from it 首先上传文件到tcode SMW0 选择新建后,输入文件名和描述,再选择想要上传的文件 上传完成后: 在表WWWPARAMS, WWWDATA里就会有信息存进去 然后就可以程序里写代码了: 屏幕上的效果:

jupyter notebook导出含中文的pdf(LaTex安装和Pandoc、MiKTex安装)

用jupyter notebook导出pdf时&#xff0c;因为报错信息&#xff0c;需要用到Tex nbconvert failed: xelatex not found on PATH, if you have not installed xelatex you may need to do so. Find further instructions at https://nbconvert.readthedocs.io/en/latest/install…

【数据分享】1929-2023年全球站点的逐年平均露点(Shp\Excel\免费获取)

气象数据是在各项研究中都经常使用的数据&#xff0c;气象指标包括气温、风速、降水、能见度等指标&#xff0c;说到气象数据&#xff0c;最详细的气象数据是具体到气象监测站点的数据&#xff01; 有关气象指标的监测站点数据&#xff0c;之前我们分享过1929-2023年全球气象站…

界面控件DevExpress WinForms/WPF v23.2 - 电子表格支持表单控件

DevExpress WinForm拥有180组件和UI库&#xff0c;能为Windows Forms平台创建具有影响力的业务解决方案。DevExpress WinForm能完美构建流畅、美观且易于使用的应用程序&#xff0c;无论是Office风格的界面&#xff0c;还是分析处理大批量的业务数据&#xff0c;它都能轻松胜任…

IDEA编辑国际化.properties文件没有Resource Bundle怎么办?

问题描述 最近在做SpringBoot国际化&#xff0c;IDEA添加了messages.properties、messages_en_US.properties、messages_zh_CN.properties国际化文件后&#xff0c;在编辑页面底部没有Resource Bundle&#xff0c;这使得我在写keyvalue的时候在每个properties文件都要拷贝一次…

【Spring源码】Bean采用什么数据结构进行存储

一、前瞻 经过上篇源码阅读博客的实践&#xff0c;发现按模块阅读也能获得不少收获&#xff0c;而且能更加系统地阅读源码。 今天的阅读方式还是按模块阅读的方式&#xff0c;以下是Spring各个模块的组成。 那今天就挑Beans这个模块来阅读&#xff0c;先思考下本次阅读的阅读…

中间件学习--InfluxDB部署(docker)及springboot代码集成实例

一、需要了解的概念 1、时序数据 时序数据是以时间为维度的一组数据。如温度随着时间变化趋势图&#xff0c;CPU随着时间的使用占比图等等。通常使用曲线图、柱状图等形式去展现时序数据&#xff0c;也就是我们常常听到的“数据可视化”。 2、时序数据库 非关系型数据库&#…

gin语言基础学习--会话控制(下)

练习 模拟实现权限验证中间件 有2个路由&#xff0c;/cookie和/home/cookie用于设置cookiehome是访问查看信息的请求在请求home之前&#xff0c;先跑中间件代码&#xff0c;检验是否存在cookie 访问home&#xff0c;会显示错误&#xff0c;因为权限校验未通过 package mainim…

阿里云安全产品简介,Web应用防火墙与云防火墙产品各自作用介绍

在阿里云的安全类云产品中&#xff0c;Web应用防火墙与云防火墙是用户比较关注的安全类云产品&#xff0c;二则在作用上并不是完全一样的&#xff0c;Web应用防火墙是一款网站Web应用安全的防护产品&#xff0c;云防火墙是一款公共云环境下的SaaS化防火墙&#xff0c;本文为大家…

canal: 连接kafka (docker)

一、确保mysql binlog开启并使用ROW作为日志格式 docker 启动mysql 5.7配置文件 my.cnf [mysqld] log-binmysql-bin # 开启 binlog binlog-formatROW # 选择 ROW 模式 server-id1一定要确保上述两个值一个为ROW&#xff0c;一个为ON 二、下载canal的run.sh https://github.c…

【Java】LinkedList vs. ArrayList:Java中的数据结构选择

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 目录 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌…

Kindling the Darkness:A Practical Low-light Image Enhancer

Abstract 在弱光条件下拍摄的图像通常会出现&#xff08;部分&#xff09;可见度较差的情况。,除了令人不满意的照明之外&#xff0c;多种类型的退化也隐藏在黑暗中&#xff0c;例如由于相机质量有限而导致的噪点和颜色失真。,换句话说&#xff0c;仅仅调高黑暗区域的亮度将不…

R语言随机抽取数据,并作两组数据间t检验,并保存抽取的数据,并绘制boxplot

前提&#xff1a;接着上述R脚本输出的seed结果来选择应该使用哪个seed比较合理&#xff0c;上个R脚本名字&#xff1a; “5utr_计算ABD中Ge1和Lt1的个数和均值以及按照TE个数小的进行随机100次抽样.R” 1.输入数据&#xff1a;“5utr-5d做ABD中有RG4和没有RG4的TE之间的T检验.c…