Map集合常见面试题
在java面试过程中,Map时常会被作为一个面试点来问,今天就在这里整理总结一下
- 首先回顾一下集合体系
- 集合面试过程中,对于单列集合经常会被问到List和set的区别
- list集合元素有序并且集合元素可以重复
- set集合元素无序并且集合元素不允许重复
- 集合面试过程中,对于单列集合经常会被问道Arraylist和Linkedlist的区别
- Arraylist底层数据结构为数组,所以有索引,查询速度比较快但是增删速度比较慢
- LinkedList底层数据是双向链表,所以没有索引,查询速度比较慢,但是增删比较快
- 集合面试过程中,对于单列集合经常会被问到List和set的区别
- 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集合常见面试题相关推荐
- Java集合常见面试题
原文链接:https://javaguide.cn 集合面试常问 Java集合框架继承图 综合面试题 1.说说List.Set.Queue和Map四者的区别. 2.集合的底层数据结构 3.如何选取集合 ...
- 二十个集合常见面试题(附答案)
1.说说你了解的集合 集合从大的方向分有两个,一是Collection集合,二是Map集合. Collection集合下有List.Set.Queue.Map集合下有HashMap.LinkedHas ...
- Java 集合常见面试题
1.ArrayList和LinkedList区别? ArrayList是容量可以改变的非线程安全集合.内部实现使用数组进行存储,集合扩容时会创建更大的数组空间,把原有数据复制到新数组中.ArrayLi ...
- Java 面试题大集合,2019最新最常见面试题加答案
原文地址:https://blog.csdn.net/zl1zl2zl3/article/details/88048480 又到一年跳槽季,课下不准备,面试徒伤悲. 本文汇总了常见面试题及面试技巧,让 ...
- mybatis基础综合/常见面试题
概念/作用: 持久层框架,通过xml或注解的方式将要执行的各种 statement配置起来,并通过java对象和statement中sql的动态参数进行映射生成最终执行的sql语句.最后mybatis ...
- Java常见面试题(持续更新)
文章目录 transient 关键字作用 final 关键字作用 封装的作用 HashMap,HashTable,ConcurrentHashMap HashMap不是线程安全的示例 HashMap常 ...
- 2020最新Java面试题(java,JavaWeb,数据库,框架),常见面试题及答案汇总
1.面试题模块汇总 面试题包括以下十九个模块:Java 基础.容器.多线程.反射.对象拷贝.Java Web 模块.异常.网络.设计模式.Spring/Spring MVC.Spring Boot/S ...
- Java常见面试题及答案汇总
面临金三银四黄金跳槽季,不光是很多在职人员跃跃欲试,也有很多大学生积极地加入到应聘行列.作为技术出身的我们,找工作的一大前提就是技术是否能过关.而对于Java程序员来说,至少是两关的面试,这首个关卡就 ...
- 加上项目路径 spring security忽略不生效_Spring 常见面试题「收藏」
Spring 常见面试题 1 Spring框架是什么?它的主要模块有哪些? Spring框架是一个Java平台,提供全面的基础设施支持开发Java应用程序.Spring处理基础设施部分,这样你就可以专 ...
- 总结Java常见面试题和答案
转载自 总结Java常见面试题和答案 int和Integer有什么区别? 答:int是java的原始数据类型,Integer是java为int提供的封装类,java为每个原始数据类型都提供了封装 ...
最新文章
- 挨踢人生路--记我的10年18家工作经历 - 后记
- kafka实现异步发送_Kafka 异步消息也会阻塞?记一次 Dubbo 频繁超时排查过程
- 编码和编码格式一样吗?_学习如何像专业人士一样编码
- 关于动态门户WEB博雅互动的源代码(HTML+CSS+javascript)
- Cobbler全自动安装CentOS(整理)
- 如何手动卸载 SQL Server 2005 实例(官方)
- 自动分号插入 ASI
- 利用python爬虫(part17)--初识selenium
- Qt文档阅读笔记-Multiple Inheritance Example 实例解析及Automatic Connections解析
- react设置static defaultProps报错问题解决
- 如何开启jvm日志_Java 从小白到大牛,JVM 不得不知的一些参数和配置
- mysql 全连接_mysql 实现全连接
- fpga c语言教程,FPGA实践教程(一)用HLS将c程序生成IPcore
- C源程序完整编译过程
- uniapp——如何在项目中使用阿里字体图标
- elasticsearch创建索引模板
- 古月居ROS入门21讲——10-12.Publisher和Subscriber的编程实现 话题消息的定义与使用
- 日期插件(默认显示当前日期)---年月
- day3-作业(18-23)(java泛型总结一)
- mysql情况数据库表数据函数_mysql数据库表单查询和函数的使用
热门文章
- 国笔手机输入法MTK支持的语言
- mysql gis 高德_基于高德自定义地图数据的GIS矢量地图制作
- qq空间显示手机型号android,任意修改QQ空间发表说说显示的手机型号
- 华为服务器设备型号查询,查看服务器机器型号
- 安卓Aop 实现权限检测
- standard、singleTop、singleTask、singleInstance
- python离线安装环境 解决 ERROR: Could not find a version that satisfies the requirement xxx 以及winError[10061]
- RF无线射频电路设计干货分享
- 【百度云提取】:JDK1.8API、Jdk1.8安装包、jQueryAPI文档、JavaScriptAPI文档、W3School相关API文档
- PCB选料时的小技巧和参考网站+电解电容封装尺寸+稳压管型号