HashMap常见面试考题
自己正在准备秋招,总结下面试常遇到的关于HashMap的问题
一、如何解决哈希冲突
- 解决哈希冲突的办法有开放地址法和链地址法
- 开放地址法:线性探测、二次线性探测、再哈希
- 链地址法:插入时间复杂度最优o(1),最差o(n)
二、HashMap中常见的问题
数组的长度总是2的n次方,为什么?
length总是2的n次方时,hash & (length-1)运算等价于hash % length , 但是&比%具有更高的效率。比如 n % 32 = n & (32 -1)
static final int hash(Object key) {int h;// 对象的hashCode的高16位亦或低16位return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);}// 用&代替了%,提高了效率// 计算插入位置i = (table.length - 1) & hash;
Map的size和length的区别?
size是key-value个数,length是数组长度
默认的负载因子?实时负载因子是如何计算的?
HashMap的put方法?
4.1 如果是第一次put,hashMap内的数组还没初始化,先进行初始化
4.2 利用hash函数得到值 hash & (length - 1) 得到插入的位置
4.3 如果插入的位置为空,构建新节点直接插入,执行4.6
4.4 如果插入的位置不为空,但是key值重复,进行覆盖, 执行4.6;如果key值不重复,执行4.5
4.5 判断该链是树还是普通链表,如果是树直接在树中插入;如果是链表则遍历,如果链表的长度大于8,转为树,否则遍历插入(重复的key覆盖)
4.6 插入成功后,判断实际存在的键值对数量size是否超过了最大容量threshold,如果超过,进行扩容
4.7 如果新插入的key不存在,则返回null,如果新插入的key存在,则返回原key对应的value值
HashMap初始容量是多少?扩容容量是多少?怎么扩容?
初始容量为16,扩容后为旧容量的两倍,计算新桶数组的容量 newCap 和新阀值 newThr,然后将原集合的元素重新映射到新集合中
遍历HashMap的方法
6.1
//1、遍历keySet for(String key : map.keySet()){System.out.println(map.get(key)); }
6.2
Set<Map.Entry<String,Object>> entrySet = map.entrySet(); // 遍历enrtySet for(Map.Entry<String,Object> entry : entrySet){System.out.println(entry.getKey()+"-"+entry.getValue()); }
6.3
Iterator<Map.Entry<String,Object>> iterator = map.entrySet().iterator();// 利用迭代器,因为entrySet本质上是个Set集合while(iterator.hasNext()){Map.Entry<String,Object> mapEntry = iterator.next();System.out.println(mapEntry.getKey()+"-"+mapEntry.getValue());}
参考文档:https://www.cnblogs.com/ysocean/p/8711071.html
HashMap常见面试考题相关推荐
- 视频教程:Java常见面试题目深度解析!
视频教程:Java常见面试题目深度解析! Java作为目前比较火的计算机语言之一,连续几年蝉联最受程序员欢迎的计算机语言榜首,因此每年新入职Java程序员也数不胜数.很多java程序员在学成之后,会面 ...
- 二级(多级)指针,二级指针和二维数组的避坑,指针面试考题
1.二级指针的的认识 2.二级指针的实战 想获得二维数组的某个人的位置,采用的是return的方式 如果把第三行的int * 换成void ,把ppos换成传参的方式做. 结果崩溃了 原因是 是个野指 ...
- 深度解析HashMap高频面试及底层实现架构!
深度解析HashMap高频面试及底层实现架构! HashMap高频面试题 1,Map接口和List接口是什么关系? 2.Map有哪些常用的实现类? 3.请阐述HashMap的put过程? 4.链表中是 ...
- js 计算任意凸多边形内最大矩形_题库 | 计算机视觉常见面试题型介绍及解答 第 7 期...
- 计算机视觉 -为什么说 Dropout 可以解决过拟合?(1)取平均的作用: 先回到标准的模型即没有 dropout,我们用相同的训练数据去训练 5 个不同的神经网络,一般会得到 5 个不同的结果 ...
- Hive常见面试问题(持续更新)
Hive常见面试问题 目录 Hive 内部表和外部表的区别,以及各自使用于哪种环境?Hive和传统数据库的区别? HiveRc 文件? Hive 分区? Hive 分区过多有何坏处以及分区时的注意事项 ...
- 面经——C/C++常见面试知识点总结附面试真题
参考:C/C++ 面试题 作者:zhaouc 发布时间: 2015-02-15 15:51:00 网址:https://blog.csdn.net/zhaouc/article/details/438 ...
- java面试常见面试问题_Java面试准备:15个Java面试问题
java面试常见面试问题 并非所有的访谈都将重点放在算法和数据结构上-通常,访谈通常只侧重于您声称是专家的语言或技术.在此类访谈中,通常没有任何"陷阱"问题,而是它们要求您利用内存 ...
- spring常见面试问题_Spring面试问题
spring常见面试问题 另外,请查看我们最新的文章69Spring面试问题与解答–最终清单 . 1)什么是春天? 回答: Spring是控件和面向方面的容器框架的轻量级反转. 2)解释春天? 回答: ...
- 【C++基础】常见面试问题(二)
1. 指针和引用的区别 指针保存的是所指对象的地址,引用是所指对象的别名,指针需要通过解引用间接访问,而引用是直接访问 指针可以改变地址,从而改变所指的对象,而引用必须从一而终: 引用在定义的时候必须 ...
- Java常见面试知识点:继承、接口、多态、代码块
问题:Java常见面试知识点:继承.接口.多态.代码块 答案: 1.继承 继承中构造方法的访问特点 子类中所有的构造方法默认都会访问父类中无参的构造方法 为什么? • 子类在初始化的时候,有可能会使用 ...
最新文章
- PTA 基础编程题目集 7-12 两个数的简单计算器 C语言
- 前端学习(2231):react条件渲染之列表渲染
- python的三个特性_Python3.9的7个特性
- 中国电信完成雷神山1672部固话装机任务
- Android Studio在创建项目是一直处于building “project name”gradle project info的解决办法...
- Linux制作软盘镜像
- 计算时间的20个常用代码段
- JAVA WBE入门之HTML的使用(超详细,必看)附实例和代码
- 电工结业试卷_电工结业总结
- 美赛常用数据库网站大全
- 6 个常用的 API 接口在线管理平台
- 玩转SQLite5:使用Python来读写数据库
- ffmpeg音频滤镜
- 技术人如何才能不焦虑
- PCB LAYOUT高速信号走线指南
- #Windows server 2019将辅助域控升级为主域控
- 2023秋招--腾讯天美--游戏客户端--三面面经
- 网络销售-----让客户绝对产生购买欲望的二十个技巧(一)
- R语言基于copula的贝叶斯分层混合模型的诊断准确性研究
- 【大唐杯学习超快速入门】5G智能网络优化
热门文章
- 我自己常用的几个JS深浅拷贝的方法
- Unity3D场景性能优化/渲染/卡顿/搭建优化 遮挡剔除/层消距离技术/LOD(多层次细节)
- html js css 简明教程,HTML+CSS+JavaScript网页制作简明教程
- 清除流氓软件的第一利器(IceSword)
- 零基础微信小程序开发学习笔记(2.构建静态界面)
- 在WordPress中使用旋转文字创建“会话”横幅:第1部分
- js报错“TypeError: ‘stepUp‘ called on an object that does not implement interface HTMLInputElement”
- 求原谅---好久没更新了
- ESXi 6 升级到ESXi 6.5VIB冲突问题
- Windows 微信多开