hashmap为什么用红黑树_HashMap

2023-11-06

以下面试题从看准,牛客,以及大量大厂面经中收集而来,面向真实面试。

一、面试题总览

面试题整理后分为三大模块,分别是数据结构,扩容以及线程安全,同样梳理HashMap的时候也可以从这三个角度展开。下面这些问题相信大家在面试过程中也会被经常问到,也很容易的回答出来。就我本身而言,每次面试的时候都会重新看一遍源代码,有时候还回去再找一些相应的题目,这其实浪费了很多时间,所以我想把这些都整理出来,供大家和自己复习,以后面试过程中使用。如果其中有什么问题,欢迎指正,留言交流,非常感谢。

1.数据结构

HashMap面试题

1.hashmap的数组长度为什么要保证是2的幂?(Hash表设计文章中已解答)

性能及空间利用率两点来回答。

位运算性能较取模运算快,其实可以不一定是2的幂,但这样会导致利用率较低。比如15,最后一位永远是0,任意hash值与其做与运算得到的索引永远是偶数,这样就会导致只有一半的利用率。所以为2的幂才是最合适的。

2.hashmap如何解决hash冲突? 以及如果冲突了,怎么在hash表中找到目标值

链地址法以及红黑树。扩容

如果并没有达到树化条件,则直接扩容

判断是否产生冲突

判断是否为树

插入到链表尾部后,判断是否要进行树化。

首先计算hash值,定位桶位,判断桶中元素类型是Node还是TreeNode,如果是Node表明是链表,如果是TreeNode为红黑树结构,链表直接遍历,红黑树直接查找。

3.怎么尽量避免哈希冲突,自己说了充分利用对象的属性+良好的哈希算法,但是面试官还继续追问,自己好像也没有找到答案,扩容??

4遇到哈希冲突的时候,除了数组+链表,还有什么处理方式

5.hashMap底层?为什么jdk1.8要用红黑树实现?什么时候会出现线程不安全?怎么解决线程不安全?默认初始容量是16,如果我改成7,容量会变成7么?为什么?

6.为什么hashmap中的链表需要转成红黑树?

7.jdk1.8之前并发操作hashmap时为什么会有死循环的问题?

由于前面确定了负载因子为0.75,在loadfactor为0.75时根据泊松分布,

8.HashMap 转成红黑树,8这个数字是怎么来的  泊松分布;退化为链表的6这个数字呢?

9.loadFactor为什么是0.75?

10.上来问项目,然后问hashmap每一步都问,印象最深的是为什么计算hash值要右移16位不是17位。还有设计原则。当时没背。凉凉

11.往HashMap插入删除数据,时间复杂度是多少

12.红黑树和链表那个增加快

13.怎么实现HashMap,定义需要的方法和API,时间复杂度不能为O(n)

14.HashMap 1.7为什么会导致死循环?

15.有1000个数据存在hashmap中,实际的数量是多少,考虑负载因子和扩容

16.Hashmap为什么不用平衡树?为什么用红黑树而不是B树,B+树,AVL树

17.HashMap HashTable区别 HashMap的优化

18.你都知道哪些Map,都在什么场景下使用?为什么?

19.hashmap为什么要重写hashcode和equls方法

20.说一说jdk1.8中,对hashMap的优化

21.红黑树和AVL树有什么区别?HashMap为什么不采用AVL树?

22.如何能提示HashMap的性能

预设hashmap的长度,避免resize,这也是问当确定了数据总量为1000,数组总长度应该是多少的原因

23.HashMap key可以为null,为什么ConcurrentHashMap key 不可以为null ?

ConcurrentHashMap不能为null原因,无法去判断到底是key不存在还是value为null

24.hashmap初始大小 1>4 = 16;最大 1>30 即2的30次方;超过最大值如何处理?

25.resize是否要重新计算hash值?

26.java hashMap和redis map的rehash有什么区别?

27.HashMap 如何保证容量一直是2的N次方,如果构造函数传的不是2的n次方呢?

28.JAVA8 的 HashMap 中 TREEIFY_THRESHOLD 常量为什么是 8 ?https://www.v2ex.com/t/651978

29.HashMap节点是有序的吗?了解哪些有序的Map?

HashSet面试题

1.HashSet的value是什么

2.HashSet为什么不存null?

hashMap的put方法,返回null表示新添加,返回oldValue表示覆盖。

2.扩容

1.hashmap什么时候会触发扩容?

2.hashmap扩容时每个entry需要再计算一次hash吗?

3.说一下hashmap的扩容机制吧

3.线程安全问题

1.java hashMap和redis map的rehash有什么区别?

2.如何才能得到一个线程安全的HashMap?

下面从源码的角度来分析和解答以上问题。

二、HashMap源码分析

版本JDK1.8,后面会分析JDK1.7中HashMap源码

1.默认数据

//默认初始容量16static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; //最大容量2^30static final int MAXIMUM_CAPACITY = 1 << 30;//默认负载因子 0.75static final float DEFAULT_LOAD_FACTOR = 0.75f;//需要树化的链表长度阈值static
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

hashmap为什么用红黑树_HashMap 的相关文章

  • 注销时Firebase facebook按钮android身份验证

    我在我的 Android 应用程序中使用 firebase 并在 facebook SDK 中使用登录 我面临的唯一问题是 当我使用 facebook 登录然后注销时 facebook 登录按钮处于 注销 状态 当我单击它时 它会询问我是否
  • 在 Android 中关闭 Spinner 中的下拉菜单

    在 Android 中打开和关闭微调器时 我需要为箭头图标设置动画 打开微调器时我可以旋转箭头 我只是放了一个setOnTouchListener on the Spinner 当下拉菜单关闭或隐藏时 问题就来了 因为我不知道如何在该操作上
  • 单值或常量值时在 x 轴上绘制的样条图 - highchart

    while using the older version of highchart 2 1 6 if a plot had only one value or a series of same values it would plot a
  • 如何取消异步下载?

    我有一个问题 如何取消下载 client CancelAsync 对我来说不起作用 因为如果我取消下载并开始新的下载 代码仍会尝试访问旧的下载文件 您必须知道 在我的代码中 有一个部分 当下载完成时 它应该解压缩已下载的文件 像这样的示例
  • Docker 容器在运行或重新启动 PostgreSQL 镜像后立即退出

    我是 docker 的初学者 由于容器重新启动问题 我陷入困境 当我尝试重新启动现有退出的容器或创建新容器 删除旧容器后 运行时 会出现问题 docker run d name mempostgres v home lukasz lc pg
  • 如何停止/关闭 SignalR 服务

    我刚刚从 VS2010 Express 升级到 VS2013 Express 并打开我的项目 我发现 SignalR 正在运行 但我不需要它 Firebug 充满了 SignalR 消息 我花了很长时间搜索如何停止 关闭它 但我找不到它 在
  • 使用 POST 将数据从 Android 发送到 AppEngine Datastore

    抱歉 如果这是一个简单的问题 但我只是不知道我应该做什么 而且我认为我有点超出了我的深度 我想将数据从 Android 应用程序发送到在 Google App Engine 上运行的应用程序 数据必须从那里写入数据存储区 我的数据主要采用对
  • 如何使用 MonoTouch c# 以编程方式获取联系人?

    如何获取 iPhone 中的联系人 我需要从 iPhone 联系人中获取所有属性 如何使用MonoTouch以编程方式实现 ABAddressBook iPhoneAddressBook new ABAddressBook ABPerson
  • 如何在每次调用函数时有选择地简化参数,而不评估函数本身?

    我正在使用 Coq 8 5pl1 举一个人为但具有说明性的例子 fix so simpl will automatically unfold Definition double fix f n 2 n Theorem contrived n
  • 带有 for 循环和管道的批处理脚本

    我想要一个目录中的所有 csv 文件 其文件名不包含单词 summary 在命令提示符下我可以键入以下命令 dir b my dir csv find V summary 当我尝试将上述命令传输到批处理文件中时 我遇到了一个问题 因为 fo
  • Azure 可以运行 WPF 吗?

    我想编写一个在 Windows Azure 上运行的 ASP Net MVC 应用程序 该应用程序将使用 WPF 创建图像 在我开始写之前 这会起作用吗 Azure 是否具有渲染 WPF 所需的 DLL 包括 DirectX 和图形功能 我
  • HTTP 状态码 302

    我正在用 Ruby 开发 Rails 后端 并且想将数据发布到该服务器 但如果我用 PAW 发出后请求 我就会被重定向 我是 Http 请求的新手 有人可以向我解释一下功能以及如何使用 http post 请求吗 我想在我的服务器数据库 s
  • 调整图像大小以适合画布 - Gimp

    我目前正在使用 Gimp 调整一些图像的大小 我是一名 Web 开发人员 但我不太使用图像处理软件 因为大多数图像都是由设计师提供的 所以 Gimp 工具对我来说非常陌生 我已经浏览了 Gimp 网站上的所有教程和帮助指南 但我找不到最简单
  • 使用时间戳查询 Firebase 数据

    这是我当前在 Firebase 上的数据设计 数据只是 事件 参考中的 json 列表 时间戳 操作和持续时间字段是固定的 以后可能会添加更多可选字段 backend 7f34e events KQ30Lc6lasdfasdfAi1URf
  • API 端点的 Django 子域配置

    我已经建立了一个 Django 项目 它使用django rest framework提供一些 ReST 功能 网站和其他功能都运行良好 然而有一个小问题 我需要我的 API 端点指向一个不同的子域 例如 当用户访问该网站时 他 她可以根据
  • id不存在时查找标签文本

    我正在使用 selenium Web 驱动程序在以下 html 标签中查找标签文本 tr style display inline padding left 10px padding right 10px td table width 77
  • 使用 JPA/ORM 生成数据库模式是一个坏主意吗?

    Salve Part of 另一个问题 答案 https stackoverflow com questions 7595578关于 SO 以及其他声称相同的声明 如果您通过 JPA 更新数据库架构 但通常不是一个好的做法 您是否真的不应该
  • Glassfish 应用服务器中的 JDBC 和连接池

    我想在 EAR 部署上设置连接池和 JDBC 连接 这样我就不必在手动部署到的每个应用程序服务器上进行设置 我需要做什么 是否有一个 xml 文件可以将这些信息放入其中 如果您使用单个 GlassFish 管理控制台来管理整个环境中的多个应
  • 为什么“扔”和“扔前”在这种情况下有相同的行为?

    我惊呆了 我一直以为throw单独在 catch 块中会抛出手头的异常而不改变堆栈跟踪 但是throw ex在 catch 块中将更改堆栈跟踪以显示源自语句位置的异常 采取以下两个代码块 我希望输出会略有不同 因为使用throw和其他用途t
  • AngularJS 使用 $apply 而不使用 $scope

    我开始使用 AngularJS 并且接受了用它来编写控制器的约定 而不是用 scope 所以我的控制器看起来像这样 myApp controller SomeController function this myModel id 1 nam

随机推荐

  • 内部类、枚举、Object类

    内部类 定义在一个类的内部的类 作用 1 内部类和外部类可以互相访问其成员 2 通过内部类 可以实现多继承 3 缺点 结构复杂 代码可读性不强 分类 成员内部类 1 不能有static属性和方法 原理同局部变量不能用static修饰 但是s
  • NumPy库学习笔记(未完)

    NumPy库 这篇文章主要内容来源于Python Numpy 教程 NumPy 中文和python常用库 NumPy 和 sklearn入门 ML小菜鸟 博客园 cnblogs com 1 1 导入NumPy库 import numpy a
  • VS Code常用插件安装及使用

    C C 开发常用插件安装 C C 在C C 开发中 这个肯定是必须的 C C Snippets C C 重用代码块 C C Advanced Lint C C 静态检测 Code Runner 代码运行 Include AutoComple
  • 小程序如何获取当前的天气预报

    大家好 我是陈楠酒肆 今天我为大家分享的是小程序获取当前的天气预报 我们先看看效果图 在实现这个效果之前我们需要引用一个JS文件 就是amap wx js 这个文件可以在我的交流群里下载 由于这里我使用了高德地图密钥 因此 大家还需要在高德
  • 论文研读 —— 10. PCA-Kalman: device-free indoor human behavior detection with commodity Wi-Fi (2/3)

    文章目录 3 2 Online behavior testing phase 4 Experimental setup 4 1 Hardware testbed 4 2 Experimental scenarios 3 2 Online b
  • 设计之星 ai_“AI创新之星”评选活动征集工作已启动,6月15日止,速来!

    为了推动人工智能与实体经济发展的深度融合 充分展示国内企业和创业团队在人工智能领域的创新成果 中国人工智能 多媒体信息识别技术竞赛 组委会在竞赛期间组织开展 AI创新之星 评选活动项目征集工作 评 选 范 围 评选主要围绕 深化融合应用 培
  • randomforestregressor参数详解

    randomforestregressor参数详解 sklearn ensemble RandomForestRegressor n estimators 10 数值型参数 默认值为100 此参数指定了弱分类器的个数 设置的值越大 精确度越
  • 【JAVA基础】核心机制

    b站大学课程笔记 下面是课程链接 https www bilibili com video BV1364y1k7WG p 11 spm id from pageDriver vd source b53165477127ff81132dc79
  • 编译gnome-sharp-2.20.1出错

    To solve the problem gtk2 development library must be installed Under CentOS this can be done with yum groupinstall Deve
  • 密码正则

    正则一 密码正则 密码需包含字母 符号或者数字中至少两项且长度超过6位数 最多不超过16位数 const regPwd str gt let zmReg A Za z 大小写字母 let numReg 0 9 数字 let zfReg A
  • QTcp-心跳

    心跳机制 大致实现两中 心跳发起的主动方为谁 server或client 其基本思路 是在一定时间间隔内模拟server和client的通信 所以 这就比一般通信多了时间属性 而非随意进行交互 这里 我们将client作为主动方 其过程如下
  • 通过递归方法更改对象中的属性值

    需求 递归一个对象 我们更改其type全部为5 我们首先思考如果用每一层的循环我们怎么取解决 var data label 一级 1 type 1 children label 二级 1 1 type 1 children type 1
  • 有人提议扣程序员80%的税分给穷人,多人点赞。

    大家好 我是北妈 0 现在经济不好 很多人内心很慌 然后就有人开始打歪主意了 比如今天我看到了这个 这个说法甚至得到了很多人的支持和点赞 为什么会有很多人支持这种想法呢 毕竟在大家眼睛里 程序员是高薪 有钱的代名词 在大多数人工资收入都很低
  • SPI协议介绍

    在调试LCD驱动时用到了SPI接口 因此将了解 理解到的SPI知识记录下来 SPI接口有三线和四线两种类型 这里只介绍常用的四线类型 what 简单介绍 术语表 基本概念 why 优点特点 how 过程 what 简单介绍 术语表 name
  • 安装Ubuntu遇到unable to find a medium containing a live file system解决方案

    安装unable to find a medium containing a live file system 搜了好几个帖子 说是重新烧录u盘 换usb2 0 都不好使 最后找到了 在启动页面点击e 可以进入启动写参数界面 将quiet
  • 搜索提示是如何实现的

    经典的想法就是一个Trie的 keysWithPrefix 问题 更高级的 进一步考察 keysWithPrefix需要做prefix下的inOrder遍历 但是每当用户type下一个字符 那个提示列表瞬间就显示出来了 不像是遍历很大一棵树
  • CNCF X ACE KubeMeet 云原生应用管理专场·上海站来啦!

    简介 10月16日上海站 KubeMeet 将以 云原生应用管理 为主题 围绕 KubeVela 和 OpenKruise 两个项目的技术分享和企业实践展开 帮助开发者更好的应对云原生应用管理痛点 伴随着 Kubernetes 生态逐步完善
  • JavaScript实现随机抽奖功能

    通过数组存储抽奖号码 点击按钮实现名字 号码的滚动 点击停止即可实现抽奖功能 设置一个定时器 使用random方法随机获取号码 当点击按钮时去掉计时器实现暂停功能 思路解析 1 抽奖功能的名字滚动可以使用定时器都是获取名单中的数据 2 为了
  • 在字符串中删除特定的字符

    在字符串中删除特定的字符 字符串 题目 输入两个字符串 从第一字符串中删除第二个字符串中所有的字符 例如 输入 They are students 和 aeiou 则删除之后的第一个字符串变成 Thy r stdnts include
  • hashmap为什么用红黑树_HashMap

    以下面试题从看准 牛客 以及大量大厂面经中收集而来 面向真实面试 一 面试题总览 面试题整理后分为三大模块 分别是数据结构 扩容以及线程安全 同样梳理HashMap的时候也可以从这三个角度展开 下面这些问题相信大家在面试过程中也会被经常问到