自己正在准备秋招,总结下面试常遇到的关于HashMap的问题

一、如何解决哈希冲突
  1. 解决哈希冲突的办法有开放地址法链地址法
  2. 开放地址法:线性探测、二次线性探测、再哈希
  3. 链地址法:插入时间复杂度最优o(1),最差o(n)
二、HashMap中常见的问题
  1. 数组的长度总是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;
    
  2. Map的size和length的区别?

    size是key-value个数,length是数组长度

  3. 默认的负载因子?实时负载因子是如何计算的?

    默认为0.75,实时负载因子计算方式为size(key-value个数) / length(数组长度)

  4. 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值

  5. HashMap初始容量是多少?扩容容量是多少?怎么扩容?

    初始容量为16,扩容后为旧容量的两倍,计算新桶数组的容量 newCap 和新阀值 newThr,然后将原集合的元素重新映射到新集合中

  6. 遍历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常见面试考题相关推荐

  1. 视频教程:Java常见面试题目深度解析!

    视频教程:Java常见面试题目深度解析! Java作为目前比较火的计算机语言之一,连续几年蝉联最受程序员欢迎的计算机语言榜首,因此每年新入职Java程序员也数不胜数.很多java程序员在学成之后,会面 ...

  2. 二级(多级)指针,二级指针和二维数组的避坑,指针面试考题

    1.二级指针的的认识 2.二级指针的实战 想获得二维数组的某个人的位置,采用的是return的方式 如果把第三行的int * 换成void ,把ppos换成传参的方式做. 结果崩溃了 原因是 是个野指 ...

  3. 深度解析HashMap高频面试及底层实现架构!

    深度解析HashMap高频面试及底层实现架构! HashMap高频面试题 1,Map接口和List接口是什么关系? 2.Map有哪些常用的实现类? 3.请阐述HashMap的put过程? 4.链表中是 ...

  4. js 计算任意凸多边形内最大矩形_题库 | 计算机视觉常见面试题型介绍及解答 第 7 期...

    - 计算机视觉 -为什么说 Dropout 可以解决过拟合?(1)取平均的作用: 先回到标准的模型即没有 dropout,我们用相同的训练数据去训练 5 个不同的神经网络,一般会得到 5 个不同的结果 ...

  5. Hive常见面试问题(持续更新)

    Hive常见面试问题 目录 Hive 内部表和外部表的区别,以及各自使用于哪种环境?Hive和传统数据库的区别? HiveRc 文件? Hive 分区? Hive 分区过多有何坏处以及分区时的注意事项 ...

  6. 面经——C/C++常见面试知识点总结附面试真题

    参考:C/C++ 面试题 作者:zhaouc 发布时间: 2015-02-15 15:51:00 网址:https://blog.csdn.net/zhaouc/article/details/438 ...

  7. java面试常见面试问题_Java面试准备:15个Java面试问题

    java面试常见面试问题 并非所有的访谈都将重点放在算法和数据结构上-通常,访谈通常只侧重于您声称是专家的语言或技术.在此类访谈中,通常没有任何"陷阱"问题,而是它们要求您利用内存 ...

  8. spring常见面试问题_Spring面试问题

    spring常见面试问题 另外,请查看我们最新的文章69Spring面试问题与解答–最终清单 . 1)什么是春天? 回答: Spring是控件和面向方面的容器框架的轻量级反转. 2)解释春天? 回答: ...

  9. 【C++基础】常见面试问题(二)

    1. 指针和引用的区别 指针保存的是所指对象的地址,引用是所指对象的别名,指针需要通过解引用间接访问,而引用是直接访问 指针可以改变地址,从而改变所指的对象,而引用必须从一而终: 引用在定义的时候必须 ...

  10. Java常见面试知识点:继承、接口、多态、代码块

    问题:Java常见面试知识点:继承.接口.多态.代码块 答案: 1.继承 继承中构造方法的访问特点 子类中所有的构造方法默认都会访问父类中无参的构造方法 为什么? • 子类在初始化的时候,有可能会使用 ...

最新文章

  1. PTA 基础编程题目集 7-12 两个数的简单计算器 C语言
  2. 前端学习(2231):react条件渲染之列表渲染
  3. python的三个特性_Python3.9的7个特性
  4. 中国电信完成雷神山1672部固话装机任务
  5. Android Studio在创建项目是一直处于building “project name”gradle project info的解决办法...
  6. Linux制作软盘镜像
  7. 计算时间的20个常用代码段
  8. JAVA WBE入门之HTML的使用(超详细,必看)附实例和代码
  9. 电工结业试卷_电工结业总结
  10. 美赛常用数据库网站大全
  11. 6 个常用的 API 接口在线管理平台
  12. 玩转SQLite5:使用Python来读写数据库
  13. ffmpeg音频滤镜
  14. 技术人如何才能不焦虑
  15. PCB LAYOUT高速信号走线指南
  16. #Windows server 2019将辅助域控升级为主域控
  17. 2023秋招--腾讯天美--游戏客户端--三面面经
  18. 网络销售-----让客户绝对产生购买欲望的二十个技巧(一)
  19. R语言基于copula的贝叶斯分层混合模型的诊断准确性研究
  20. 【大唐杯学习超快速入门】5G智能网络优化

热门文章

  1. 我自己常用的几个JS深浅拷贝的方法
  2. Unity3D场景性能优化/渲染/卡顿/搭建优化 遮挡剔除/层消距离技术/LOD(多层次细节)
  3. html js css 简明教程,HTML+CSS+JavaScript网页制作简明教程
  4. 清除流氓软件的第一利器(IceSword)
  5. 零基础微信小程序开发学习笔记(2.构建静态界面)
  6. 在WordPress中使用旋转文字创建“会话”横幅:第1部分
  7. js报错“TypeError: ‘stepUp‘ called on an object that does not implement interface HTMLInputElement”
  8. 求原谅---好久没更新了
  9. ESXi 6 升级到ESXi 6.5VIB冲突问题
  10. Windows 微信多开