HashMap面试题1

Lumerical官方案例、FDTD时域有限差分法仿真学习(十三)——多模干涉耦合器(MMI) 计算通过 1×2 端口多模干涉 (MMI) 耦合器的宽带传输和光损耗。 使用设备 S 参数在 INTERCONNECT 中创建 MMI 的紧凑模型。 它还展示了如何使用 CML 编译器提取这些参数以生成紧凑模型。 一、概述 了解模拟工作流程和关键结果 低损耗光合路器和分路器是基于 Mach-Zehnder 的光调制器的基本组件,并且是集成电路的关键组成部分。通过在输入/输出波导处使用线性锥形确保输入/输出波导的模式与干涉区域之间的 阅读详情

HashMap面试题

转自:http://www.mayikt.com/

1、HashMap和HashTable的区别?

<1>、HashTable是线程安全的,不允许key为空,因为put方法上加上了synchronized,在方法体中,有代码判断如果key为空,则抛出异常;

<2>、HashMap线程是不安全的,允许key为空;

2、HashMap的key可以为空,这个key存放数组的那个位置上?

存放在到下标为零的位置,也就是数据的第一个位置上,只允许存放一个key为空的对象;

因为在方法hash(Object key)中,定义如下:
static final int hash(Object key) {
int h;
return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);
}
所以,key为空时,存放在数组的第一个位置上;

3、HashMap是否允许存放自定义对象作为Key?

可以;因为在put(k,v)方法中,key定义了允许任何对象,
在hash(Object key)方法中,也定义了可以可以为任何对象

4、HashMap在JDK1.7和JIDK1.8之间有什么区别?(HashMap底层采用那种数据结构?)

<1>、JDK1.7底层采用数据+链表结构;
<2>、JDK1.8底层采用数据+链表结构+红黑树;

5、HashMap如何解决hash冲突的问题;

HashMap使用链表存放hash值相等内容不同的key,存放在同一个链表或者红黑树中;

6、HashMap的put方法地城是如何实现的?

<1>、判断key,如果为空,则存放在数组0;
<2>、默认Hashmap的初始容量是16,加载因子是0.75,大小是16*0.75=12,每次扩容是2倍;
<3>、根据key计算hash值,hash值取容量的模,得到数组下标位置;
<4>、如果hash值相等,但是内容不相等的情况,存放到同一个链表中;
<5>、如果当前size大于加载因子阀值,开始2倍扩容;
备注:1.8中,如果链表大于8的情况下,开始把链表转换为红黑树;

7、HashMap的加载因子为什么是0.75而不是其他呢?

hjh:折中方案,空间利用率高,冲突少,0.75最合适;

8、HashMap1.7中数组扩容死循环的问题,有了解吗?

HashMap1.7中数组扩容死循环有了解,resize(int newCapacity)
方法调用了transfer(newTable)方法;1.7采取了头插入法方式实现,在多线程操作时有可能出现死循环;
备注:头插入法就是把最新的冲突节点放在最前面;
尾插入法就是把冲突节点放在最后;

9、HashMap根据Key查询时间复制度是多少?

HashMap根据key直接计算hash值,取模得到index值,直接从数组中取数据;
如果index没有产生冲突,可以直接取数据,时间复杂度,是O(1);
若果index有产生了冲突,遍历链表,时间复杂度为O(n);
如果index有产生了冲突,并且转换为红黑树了,则时间复杂度是O(logn);

10、HashMap根据Key查询时间复制度是多少?

<1>、1.8的链表采用了尾插入发,
<2>、1.8解决了1.7的死锁问题;
<3>、1.8的链表长度大于8时,转换为红黑树;

11、HashMap1.8为什么需要加入红黑树?

如果index冲突过多,导致链表过长,查询会变慢,因为链表的时间复杂度是O(n);
为了解决链表查询慢的问题,如果链表长度大于8,并且数组容量大于64的情况下,
链表转换为红黑树,红黑树的时间复杂度是O(logn);

12、HashMap线程不安全,有哪些代替的方案吗?

<1>、ConcurrentHashMap,这个线程安全的,采用了分段锁,16段,一段一个锁;
<2>、Collections.synchronizedMap(map) 可以转换为线程安全的Map;

13、红黑树与链表的时间复杂度分别是多少?

红黑树是O(logn);
链表的是O(n);

Qt+OpenGL+Cesium三件套:打造高性能3D GIS桌面应用的5个关键点 本文深入探讨了如何利用Qt、OpenGL和Cesium数据规范构建高性能桌面级3D GIS应用。文章聚焦于五个关键点:架构选型、OpenGL渲染优化、3D Tiles数据解析与调度、内存与多线程管理,以及高级特性实现,旨在帮助开发者在C++生态中打造不依赖网络、运算能力更强的重型3D地理信息客户端。 阅读详情

相关推荐

使用STC15F104W产生PWM脉冲

最近的小项目中使用到了STC15F104W产生PWM脉冲

yeats1989的专栏 1万+

hashmap为什么在链表长度大于8,且数组长度大于64时将链表转换为红黑树

这个问题分两步分析: 1、为什么是链表长度大于8时 看一下源码解释 就是官方做过很多测试,发现链表长度在大于8以后再出现hash碰撞的可能性几乎为0,虽然转化为红黑树后,查找的效率会比链表高,但是转化红黑树这个过程是耗时的,而且在扩容时还要对红黑树重新的左旋右旋保持平衡,相对耗时,所以,阈值设置为8就是为了尽量减少hashmap中出现红黑树(hashmap中链表才是常态) 2、为什么数组长度大于64时 同样,先看一下源码怎么解释的 其实这个源码中解释的不清不楚,里边说最小应该为4*.

qq_42949615的博客 7928

在昇腾910B上,用kubeadm快速拉起一个双节点K8s集群(保姆级避坑指南)

本文详细介绍了在昇腾910B服务器上使用kubeadm快速搭建双节点Kubernetes集群的完整流程,包括环境准备、容器运行时配置、kubeadm初始化、节点加入与网络插件部署等关键步骤,特别针对ARM架构和昇腾芯片提供了优化配置和避坑指南。

weixin_29204749的博客 244

HashMap源码分析(基于JDK1.8)

看到网上对HashMap源码分析的文章很多,大部分概念都是对的,但是没有让人理解哈希表的本质,今天画了一些时间认真的看了一遍HashMap的源码,所以想写下这篇文章总结一下。 先来一张HashMap的底层数据结构图: 这张图大家是很熟悉的,HashMap底层就是一个Node&lt;K, V&gt; [] table,源码如下: //用来存key-value对象 transient No...

caishi13202的博客 234

告别报错!Win10下Autodock Vina 1.2.3保姆级安装与避坑指南

本文提供了Win10系统下Autodock Vina 1.2.3的完整安装与实战指南,涵盖环境配置、分子文件预处理、对接参数优化及结果分析等关键步骤。通过详细的避坑技巧和优化方案,帮助用户高效完成分子对接任务,特别适合生物信息学研究人员和药物发现领域的初学者。

weixin_29969209的博客 400

【Qualcomm高通音频】音效调试_录音文件播放有杂音,如何定位原因?

一、录音播放数据处理过程介绍 (1)TX方向 麦克风(硅麦克风或者主机体麦克风)采集模拟音频信号,经过内部CODEC芯片中的adc转换为数字信号,在经过高通音频DSP处理音效后编码为wav/aac/amr/mp3等格式文件。 (2)RX方向 音频文件经过解码、重采样还原为pcm数据,经过DSP处理音效后送到内部CODEC,然后经过DAC转换为模拟信号,送到喇叭。 二、分析步骤 1...

crow_ch的博客 5971

纯手写HashMap集合框架

HashMap集合原理在面试中问的特别多,已经发布《纯手写HashMap集合框架》,详细讲到,多种方式实现HashMap集合,基于Arraylist实现hashMap集合 基于LinkeList实现HashMap集合 基于单链表+数组实现HashMap集合 基于红黑树+数组实现HashMap Hash碰撞问题如何解决的,HasMap...

会飞的鱼 443

【智能体】零代码实战:Coze多智能体协作开发全流程解析

本文详细解析了Coze平台的多智能体协作开发全流程,从入门指南到实战技巧,帮助用户零代码构建高效AI团队。通过模块化设计和专业分工,多智能体系统能显著提升任务处理速度和准确率,适用于客服、内容创作、教育培训等多个场景。文章还提供了性能优化和常见问题解决方案,助力开发者快速掌握Multi-Agent技术。

weixin_29239279的博客 333

JAVA8 hashmap源码阅读笔记(红黑树链表)

一:hashmap的13 个成员变量 static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; -> 数组默认初始容量:16 static final int MAXIMUM_CAPACITY = 1 << 30; -> 数组最大容量2 ^ 30 次方 static final float DEFAULT_LOAD_FACTOR = 0.75f;

just xiaoqiang 1万+

Android应用开发从零到一:基于Kotlin与Jetpack Compose的完整实践指南

移动应用开发的核心在于构建一个架构清晰、可维护且可扩展的应用基础。理解应用架构的原理,如关注点分离和数据驱动UI,是实现高质量应用的关键技术价值。在现代Android开发中,Kotlin语言凭借其空安全特性和协程,能有效提升代码的健壮性与开发效率。Jetpack Compose作为声明式UI框架,代表了UI开发的未来方向,与Kotlin协程深度集成,简化了复杂交互界面的构建。这些技术共同服务于个人任务管理、企业工具等多种应用场景。本文以构建一个完整的个人任务管理应用为例,系统阐述从环境搭建、UI构建、数据持

weixin_32667955的博客 313

【x265编码器】章节6——x265的码率控制

对于CRF模式而言,右边这部分是是固定值m_rateFactorConstant,在初始化的时候确定,跟分辨率,qCompress这个参数是外部可设参数,默认值0.6,因此QP的选择只跟编码复杂度有关,跟码率无关,编码复杂度越高,QP值越高,因此可以一定程度上说CRF模式是恒定质量的编码模式。其中Complex表示当前帧的编码复杂度,x265中用lookahead模块计算的SATD作为衡量当前帧的复杂度,c为模型参数,qscale是率失真优化中的拉格朗日乘子,R为编码当前帧需要的比特数。

vcvdv123的博客 1万+

java HashMap 源码解析

JDK 1.7 中 HashMap 是以数组加链表的形式组成的; JDK 1.8 之后新增了红黑树的组成结构,当链表大于 8 并且容量大于 64 时,链表结构会转换成红黑树结构. JDK 1.8 之所以添加红黑树是因为一旦链表过长,会严重影响 HashMap 的性能,而红黑树具有快速增删改查的特点,这样就可以有效的解决链表过长时操作比较慢的问题。 public class HashMap&...

xu990128638的专栏 274

7、树莓派故障排查全攻略

本文详细介绍了树莓派在使用过程中常见的各类故障及其排查方法。内容涵盖键盘鼠标诊断、电源诊断、显示诊断、启动诊断、网络诊断以及紧急内核的使用,提供了具体的解决方法和实用建议。同时,文章总结了故障排查流程、常见故障及解决方法的汇总,并给出了注意事项和操作建议,帮助用户高效解决树莓派使用过程中的问题,确保其稳定运行。

cream的博客 322

HashMap面试题(jdk1.8)

文章目录1、HashMap的特性?2、HashMap底层原理? 1、HashMap的特性? (1)HashMap底层是Node数组+链表+红黑树,键值对允许均允许null且线程不安全; (2)HashMap默认容量为16、默认阈值12、默认负载因子0.75f、树化阈值>8和64、解树阈值是树节点长度<6; 解树的阈值仅在扩容方法resize()中使用到,删除方法是先删除树节点,使用特殊根节点的左右树节点判定是否转化链表 if (root == null || root.right

小萌新的博客 1056

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

JDK1.8中hashmap的面试题,这一个文章都帮你解决了

1. hashmap的面试题 (google搜索hashmap关键字取前三页的结果) 摘自 https://blog.youkuaiyun.com/u012512634/article/details/72735183 https://cloud.tencent.com/developer/article/1508095 https://www.jianshu.com/p/bf703c34072b https://cloud.tencent.com/developer/article/1508095 https://w

weekendzhu的小屋 2563

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

【Java集合】HashMap系列(五)——HashMap在JDK1.7和JDK1.8比较总结及常见面试题

对比HashMap在JDK1.7和JDK1.8的不同,HashMap的高频面试题以及分析为什么Hashtable和ConcurrentHashMap 是不允许键或值为 null 的,HashMap 的键值则都可以为 null?

小七的博客 1450

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

hashmap value可以为空吗_美团面试题:Hashmap结构,1.7和1.8有哪些区别(最详细解析)...

作者|依本多情原文:blog.youkuaiyun.com/qq_36520235/article/details/82417949一、真实面试题之:Hashmap的结构,1.7和1.8有哪些区别不同点:(1)JDK1.7用的是头插法,而JDK1.8及之后使用的都是尾插法,那么他们为什么要这样做呢?因为JDK1.7是用单链表进行的纵向延伸,当采用头插法时会容易出现逆序且环形链表死循环问题。但是在JD...

weixin_33289873的博客 155

HashMap 常见面试题(含1.7 和 1.8 对比)

HashMap 是基于哈希表的数据结构,用于存储键值对 (key-value)。其核心是将键的哈希值映射到数组索引位置,通过数组+链表(在 Java8及之后是数组 +链表+红黑树)来处理哈希冲突。Hashmap 使用键的 hashcode()方法计算哈希值,并通过 indexFor 方法确定元素在数组中的存储位置。哈希值是经过一定扰动处理的,防止哈希值分布不均匀,从而减少冲突。HashMap 的默认初始容量为 16,负载因子为 0.75。

qq_43710228的博客 1032

HashMap 面试题大全往这看 都明白了 JDK1.8

面试第一题 : HashMap为什么要用数组和链表 1.1 hashMap中的数组 1.1.1 table 官方注释翻译: 该表在首次使用时初始化,并根据需要调整大小。分配时,长度始终是 2 的幂。 (我们还在某些操作中允许长度为零,以允许当前不需要的引导机制。 transient Node<K,V>[] table; 1.1.2 transient 关键字 可以看到 HashMap实现了 Serializable 而 transient 关键字的作用是 被修饰的属性不进行序列

纸上得来终觉浅,绝知此事要躬行 719

大厂面试题:JDK1.7和1.8的HashMap有哪些区别?

我们了解过了JDK1.7和1.8的HashMap源码,今天来总结下JDK1.7和1.8的Hashmap有哪些区别?这个问题是大厂面试中最常问到的问题。 一、JDK1.7和1.8的Hashmap有哪些区别? 1、JDK1.7用的是头插法,而JDK1.8及之后使用的都是尾插法 JDK1.7是用单链表进行的纵向延伸,当采用头插法时会容易出现逆序且环形链表死循环问题。但是在JDK1.8之后使用尾插法,能够避免出现逆序且链表死循环的问题。 2、扩容后数据存储位置的计算方式不一样 在JDK1.7的时候是直接用hash值

掘客DIGGKR 2054

HashMap实现原理, 扩容机制,面试题和总结_hashmap扩容机制面试(1)

@param onlyIfAbsent onlyIfAbsent为true的时候不要修改已经存在的值,如果onlyIfAbsent为false,当插入的元素已经在HashMap中已经拥有了与其key值和hash值相同的元素,仍然需要把新插入的value值覆盖到旧value上。* @return 返回旧的value值(在数组桶或链表或红黑树中找到存在与插入元素key值和hash值相等的元素,就返回这个旧元素的value值),如果没有发现相同key和hash的元素则返回null。否则,就是只是对数组扩容。

2401_84910683的博客 974

(1)美团面试题:Hashmap的结构,1.7和1.8有哪些区别,史上最深入的分析

前言 HashMap 在 Java 和 Android 开发中非常常见 而HashMap 1.8 相对于 HashMap 1.7 更新多 今天,我将通过源码分析HashMap 1.8 ,从而讲解HashMap 1.8 相对于 HashMap 1.7 的更新内容,希望你们会喜欢。 本文基于版本 JDK 1.8,即 Java 8 关于版本 JDK 1.7,即 Java 7,具体请看文章Jav...

M_Jack的博客 670

【面试题集】HashMap在JDK1.7和1.8版本的区别

JDK1.7: 底层数据结构是数组+链表; 在JDK1.7中HashMap是以Entry数组来存储数据; 用key的hashcode取模来决定Key会被放在数组里的位置; 如果hashcode相同,或者hashcode取模结果相同,那么这些Key会被定义到Entry数组的同一个格子里,这些Key会形成一个链表; 新增节点采用头插法; 插入数据之前扩容。 JDK1.8: 底层数据结构是数组+链...

feiyangtianyao的专栏 1322

Java基础常见面试题——HashMap最新总结(JDK1.8)

HashMap源码

追求幸福,探索未知的博客 2606

hashmap value可以为空吗_美团面试题:Hashmap的结构,1.7和1.8有哪些区别?(深入分析)...

0、推荐阅读美团一面凉凉:MySQL+Java+Redis+算法+网络+Linux等一个都讲不清都是“Redis惹的祸”,害我差点挂在美团三面,真是“虚惊一场”我的美团offer凉凉了?开发工程师(Java岗)三面结束等通知...都是“算法”惹的祸,字节三面处处坑,我的offer要凉了?一、真实面试题之:Hashmap的结构,1.7和1.8有哪些区别不同点:(1)JDK1.7用的是头插法,而JDK...

weixin_31574149的博客 91

美团面试题:Hashmap的结构,1.7和1.8有哪些区别,深入的分析

JDK1.7与1.8的HashMap核心区别: 数据结构:1.7为数组+链表,1.8引入红黑树(链表长度≥8时树化); 插入方式:1.7头插法易导致环形链表,1.8改为尾插法; 扩容机制:1.7先扩容后插入,1.8先插入后扩容; 哈希计算:1.7扰动9次,1.8优化为2次; 线程安全:均非线程安全,1.8减少死循环风险但仍有数据覆盖问题。 面试要点: 默认负载因子0.75平衡空间与时间效率; 树化阈值8基于泊松分布概率极低,退化阈值6避免频繁转换; 推荐结合源码分析resize()、putVal()等关键方

ywl470812087的博客 11万+
上一篇: 3、emqx_auth_mysql批量定义ACL鉴权
下一篇: 001、开篇词:JVM 优化实战
longyi_java
博客等级 码龄20年 24粉丝 127原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值