在java面试过程中,Map时常会被作为一个面试点来问,今天就在这里整理总结一下

  • 首先回顾一下集合体系

    • 集合面试过程中,对于单列集合经常会被问到List和set的区别

      • list集合元素有序并且集合元素可以重复
      • set集合元素无序并且集合元素不允许重复
    • 集合面试过程中,对于单列集合经常会被问道Arraylist和Linkedlist的区别
      • Arraylist底层数据结构为数组,所以有索引,查询速度比较快但是增删速度比较慢
      • LinkedList底层数据是双向链表,所以没有索引,查询速度比较慢,但是增删比较快
  • HashMap
    • 数据结构

      • JDK1.7:数组+链表
      • JDK1.8之后:数组+链表+二叉树
      • Hashmap数据结构(这里以1.7为例)是由数组(table)+链表(entry)组成,每个entry对应着一个table的索引页对应着一个唯一的hash地址值
    • 初始化
    • 我们看到Hashmap在使用空参构造的时候会默认加载一个长度为16,加载因子为0.75的集合
  • HashMap的put方法(保证key的唯一性)
  • Hashmap在put的数据的时候,在底层代码中会先通过判断put的值的key是否为null,如果为null,会固定存放到table[0]下面,如果不为null,会通过hash()方法计算出key对应的hash地址,通过hash地址去寻找数据应存放的table的指定索引下,找到之后会判断put的key在链表中是否存在(地址值和具体值都要判断)如果存在则为替换,如果不存在则为新增;
  • JDK1.8的Hashmap和1.7的区别

  • JDK1.8之后在集合put元素的时候新增了一个长度检测,如果同意hash地址下的链表长度大于了等于了7,那么就会将链表转化为红黑树(为了提高查询效率)
  • HashMap和Hashtable的区别
    • Hashmap可以存储Key为null的值,线程不安全,但是效率高
    • Hashtable不可以存储Key为null的值,线程安全,但是效率低
  • 在源代码里面我们可以清楚的看到,Hashtable的put方法中有这synchronize修饰,明显是线程安全的,而在Hashmap中并没有任何相关关键字修饰,而且没有加锁,所以线程是不安全的;
  • ConcurrentHashMap
    • ConcurrentHashmap区别于hash的分段锁
    • ​​​在ConcurrentHashMap中他并没有在方法中佳田synchronize关键字修饰,而是使用Segment同步方法,而且Segment又继承了ReentrantLock,所以实现了分布式锁,保证线程安全的同时还提交了效率;

Map集合常见面试题相关推荐

  1. Java集合常见面试题

    原文链接:https://javaguide.cn 集合面试常问 Java集合框架继承图 综合面试题 1.说说List.Set.Queue和Map四者的区别. 2.集合的底层数据结构 3.如何选取集合 ...

  2. 二十个集合常见面试题(附答案)

    1.说说你了解的集合 集合从大的方向分有两个,一是Collection集合,二是Map集合. Collection集合下有List.Set.Queue.Map集合下有HashMap.LinkedHas ...

  3. Java 集合常见面试题

    1.ArrayList和LinkedList区别? ArrayList是容量可以改变的非线程安全集合.内部实现使用数组进行存储,集合扩容时会创建更大的数组空间,把原有数据复制到新数组中.ArrayLi ...

  4. Java 面试题大集合,2019最新最常见面试题加答案

    原文地址:https://blog.csdn.net/zl1zl2zl3/article/details/88048480 又到一年跳槽季,课下不准备,面试徒伤悲. 本文汇总了常见面试题及面试技巧,让 ...

  5. mybatis基础综合/常见面试题

    概念/作用: 持久层框架,通过xml或注解的方式将要执行的各种 statement配置起来,并通过java对象和statement中sql的动态参数进行映射生成最终执行的sql语句.最后mybatis ...

  6. Java常见面试题(持续更新)

    文章目录 transient 关键字作用 final 关键字作用 封装的作用 HashMap,HashTable,ConcurrentHashMap HashMap不是线程安全的示例 HashMap常 ...

  7. 2020最新Java面试题(java,JavaWeb,数据库,框架),常见面试题及答案汇总

    1.面试题模块汇总 面试题包括以下十九个模块:Java 基础.容器.多线程.反射.对象拷贝.Java Web 模块.异常.网络.设计模式.Spring/Spring MVC.Spring Boot/S ...

  8. Java常见面试题及答案汇总

    面临金三银四黄金跳槽季,不光是很多在职人员跃跃欲试,也有很多大学生积极地加入到应聘行列.作为技术出身的我们,找工作的一大前提就是技术是否能过关.而对于Java程序员来说,至少是两关的面试,这首个关卡就 ...

  9. 加上项目路径 spring security忽略不生效_Spring 常见面试题「收藏」

    Spring 常见面试题 1 Spring框架是什么?它的主要模块有哪些? Spring框架是一个Java平台,提供全面的基础设施支持开发Java应用程序.Spring处理基础设施部分,这样你就可以专 ...

  10. 总结Java常见面试题和答案

    转载自  总结Java常见面试题和答案 int和Integer有什么区别?   答:int是java的原始数据类型,Integer是java为int提供的封装类,java为每个原始数据类型都提供了封装 ...

最新文章

  1. 挨踢人生路--记我的10年18家工作经历 - 后记
  2. kafka实现异步发送_Kafka 异步消息也会阻塞?记一次 Dubbo 频繁超时排查过程
  3. 编码和编码格式一样吗?_学习如何像专业人士一样编码
  4. 关于动态门户WEB博雅互动的源代码(HTML+CSS+javascript)
  5. Cobbler全自动安装CentOS(整理)
  6. 如何手动卸载 SQL Server 2005 实例(官方)
  7. 自动分号插入 ASI
  8. 利用python爬虫(part17)--初识selenium
  9. Qt文档阅读笔记-Multiple Inheritance Example 实例解析及Automatic Connections解析
  10. react设置static defaultProps报错问题解决
  11. 如何开启jvm日志_Java 从小白到大牛,JVM 不得不知的一些参数和配置
  12. mysql 全连接_mysql 实现全连接
  13. fpga c语言教程,FPGA实践教程(一)用HLS将c程序生成IPcore
  14. C源程序完整编译过程
  15. uniapp——如何在项目中使用阿里字体图标
  16. elasticsearch创建索引模板
  17. 古月居ROS入门21讲——10-12.Publisher和Subscriber的编程实现 话题消息的定义与使用
  18. 日期插件(默认显示当前日期)---年月
  19. day3-作业(18-23)(java泛型总结一)
  20. mysql情况数据库表数据函数_mysql数据库表单查询和函数的使用

热门文章

  1. 国笔手机输入法MTK支持的语言
  2. mysql gis 高德_基于高德自定义地图数据的GIS矢量地图制作
  3. qq空间显示手机型号android,任意修改QQ空间发表说说显示的手机型号
  4. 华为服务器设备型号查询,查看服务器机器型号
  5. 安卓Aop 实现权限检测
  6. standard、singleTop、singleTask、singleInstance
  7. python离线安装环境 解决 ERROR: Could not find a version that satisfies the requirement xxx 以及winError[10061]
  8. RF无线射频电路设计干货分享
  9. 【百度云提取】:JDK1.8API、Jdk1.8安装包、jQueryAPI文档、JavaScriptAPI文档、W3School相关API文档
  10. PCB选料时的小技巧和参考网站+电解电容封装尺寸+稳压管型号