首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏沉默王二

    HashMap 精选面试题(背诵版)

    JDK 7 中,HashMap 由“数组+链表”组成,数组是 HashMap 的主体,链表则是主要为了解决哈希冲突而存在的。 在 JDK 8 中,HashMap 由“数组+链表+红黑树”组成。 The first values are: 0: 0.60653066 1: 0.30326533 2: 0.07581633 3: 0.01263606 4: 0.00157952 如果我们进一步分析,还会发现空间浪费非常大,以 length=15 为例,在 1、3、5、7、9、11、13、15 这八处没有存放数据。 以JDK 8为例,简要流程如下: 1、首先根据 key 的值计算 hash 值,找到该元素在数组中存储的下标; 2、如果数组是空的,则调用 resize 进行初始化; 3、如果没有哈希冲突直接放在对应的数组下标里 11、HashMap 的扩容方式? HashMap 在容量超过负载因子所定义的容量之后,就会扩容。 详情参照这篇 12、一般用什么作为HashMap的key?

    97430编辑于 2021-12-23
  • 来自专栏Hello知识库-JAVA基础

    3秒种搞定HashMap

    JDK1.8 总结 定位元素 HashMap定位元素位置是通过键key经过扰动函数扰动后得到hash值,然后再通过hash(key) & (length - 1)代替取模的方式进行元素定位的。 负载因子 HashMap的负载因子表示哈希表空间的使用程度(或者说是哈希表空间的利用率)。当负载因子越大,则HashMap的装载程度就越高。 \* 0: 0.60653066 \* 1: 0.30326533 \* 2: 0.07581633 \* 3: ,因为我们日常使用不会存储那么多的数据,你会存上千万个数据到HashMap中吗? 当然,这是理想的算法,但不妨某些用户使用HashMap过程导致hashCode分布离散很差的场景,这个时候再转换为红黑树就是一种很好的退让策略。

    43400发布于 2021-06-01
  • 来自专栏小赵的Java学习

    面试题HashMap和HashTable的区别

    1、两者父类不同 HashMap是继承自AbstractMap类,而Hashtable是继承自Dictionary类。 2、对外提供的接口不同 Hashtable比HashMap多提供了elments() 和contains() 两个方法。 3、对null的支持不同 Hashtable:key和value都不能为null。 4、安全性不同 HashMap是线程不安全的,在多线程并发的环境下,可能会产生死锁等问题,因此需要开发人员自己处理多线程的安全问题。 虽然HashMap是线程不安全的,但是它的效率远远高于Hashtable,这样设计是合理的,因为大部分的使用场景都是单线程。

    20220编辑于 2022-12-02
  • 来自专栏全栈程序员必看

    HashMap常见面试题_java面试题大汇总

    目录 1.HashMap的数据结构? 2.HashMap的工作原理? 3.当两个对象的hashCode相同会发生什么? 4.你知道hash的实现吗?为什么要这样实现? 5.为什么要用异或运算符? 3.当两个对象的hashCode相同会发生什么? 因为hashCode相同,不一定就是相等的(equals方法比较),所以两个对象所在数组的下标相同,”碰撞”就此发生。 使用2次扰动函数(hash函数)来降低哈希冲突的概率,使得数据分布更平均; 3. ③、存储对象时(put()方法): 1.如果没有初始化,就调用initTable()方法来进行初始化; 2.如果没有hash冲突就直接CAS无锁插入; 3.如果需要扩容,就先进行扩容; .计算hash值,定位到该table索引位置,如果是首结点符合就返回; 2.如果遇到扩容时,会调用标记正在扩容结点ForwardingNode.find()方法,查找该结点,匹配就返回; 3.

    58020编辑于 2022-09-22
  • 来自专栏全栈程序员必看

    hashmap面试题简书_三年php面试题

    这篇文章仅限小编个人的理解,小编不是Java方向的,只是对Java有很高的学习兴趣 如果有什么不对的地方还望大佬指点 HashMap的底层是数组+链表,(很多人应该都知道了) JDK1.7的是数组 8的时候,会变成红黑树 在红黑树的元素小于6的时候会变成链表 元素进行尾插 HaspMap的数组默认大小为16 数组也叫做Hash桶 (貌似听说这个值和阿里巴巴Java开发手册好像有点关系) HashMap 元素的下标是 HashCode(元素) & (数组的长度-1) HashMap的扩容 Resize 扩容的话,这里有一个值叫做loadFactor(阈值),默认值为0.75; 当数组的 元素数量>数组大小 , JDK1.7的是分段数组,有Segment锁(继承于ReentrantLock)加速一小段保证并发 JDK1.8 是和HashMap一样了,数组+链表(或者红黑树) Synchronized( 锁)and CAS(compare and swap) (JVM在1.6对Synchronize的优化很好) CAS通俗易懂,比较并替换 (CAS是一种无锁算法,CAS有3个操作数,内存值V,旧的预期值

    27320编辑于 2022-09-22
  • 来自专栏云计算linux

    JAVAEE面试题之一HASHMAP精讲

    JAVA系列面试题 特点 1.高频面试 2.力求精深 3.贴近企业 4.迭代升级 1.HashMap的数据结构 基本功的问题,难度指数:1星; 1.7 数组+链表; 1.8 数组+链表+红黑树 2.当两个对象的 在HashMap这种数据结构上,存储的元素,hashCode一样,如果说,内容一致,则不能添加到同一个HashMap对象;否则,内容不一致,在此结构之后,变成链表格式。 3.初始容量是多少? 基本功,难度指数:2星 首先是HashMap数组的存储结构,在hashCode()冲突的时候,长度够用情况下,变成链表格式; 其次:长度》=8,最小容量是64的情况下,会变成红黑树。 难度指数:3星-4星 考察知识点:HashMap基本功。 设置一个超过阈值范围的,初始容量: 初始容量*0.75>1024 这里使用到了Oracle官方的插件 <! time = 1, timeUnit = TimeUnit.SECONDS) // 预热 2 轮,每次 1s @Measurement(iterations = 5, time = 3,

    20410编辑于 2024-12-07
  • 来自专栏全栈程序员必看

    JAVA面试题HashMap和Hashtable的区别

    HashMap和Hashtable的区别 1.共同点:都是双列集合,底层都是哈希算法 2.区别: * 1.HashMap是线程不安全的,效率高,JDK1.2版本 * Hashtable是线程安全的 ,效率低,JDK1.0版本 * 2.HashMap可以存储null键和null值 * Hashtable不可以存储null键和null值 3.代码示例: public class testHashtable 虽然Hashtable比HashMap出现的早一些,但是现在Hashtable基本上已经被弃用了。而HashMap已经成为应用最为广泛的一种数据类型了。 3 继承的父类不同 HashMap和Hashtable不仅作者不同,而且连父类也是不一样的。HashMap是继承自AbstractMap类,而HashTable是继承自Dictionary类。 因此,在HashMap中不能由get()方法来判断HashMap中是否存在某个键, 而应该用containsKey()方法来判断。

    98010编辑于 2022-10-01
  • 来自专栏Java极客技术

    一文解读所有HashMap面试题

    HashMap 说到 HashMap 想必大家从脑海中直接复现出了一大堆的面试题HashMap 的数据结构 JDK7 和 JDK8 HashMap哪里不一样 HashMap是否安全 HashMap 的扩容机制 说到这里,我们就来挨着分析一下这个 HashMap 的这写面试题HashMap 的数据结构 这个 HashMap 的数据结构,面试官这个问题,属于那种可大可小的,往大了说,那就是需要你把所有的关于 HashMap 中的内容都详细的解释明白,但是如果要是往小了说,那就是介绍一下内部结构 HashMap是否安全 一说这个,肯定都是非常基础的面试题,都知道 HashMap 是属于那种线程不安全的类,为什么不安全,他不安全到底会提现在哪个地方,难道面试的时候,你就只会说他的内部没有被 synchronize HashMap 的扩容机制 我们在上面也都列举了一下 HashMap 的一些关键参数,接下来,就来分析他的扩容是怎么实现的 , public HashMap(int initialCapacity

    36220编辑于 2022-12-04
  • 来自专栏java一日一条

    Java面试题:如何对HashMap按键值排序

    Java中HashMap是一种用于存储“键”和“值”信息对的数据结构。不同于Array、ArrayList和LinkedLists,它不会维持插入元素的顺序。 因此,在键或值的基础上排序HashMap是一个很难的面试问题,如果你不知道如何解决的话。下面让我们看看如何解决这个问题。 ? 1. HashMap存储每对键和值作为一个Entry<K,V>对象。 例如,给出一个HashMap, ? 键的每次插入,都会有值对应到散列映射上,生成一个Entry <K,V>对象。通过使用这个Entry <K,V>对象,我们可以根据值来排序HashMap。 2.创建一个简单的HashMap,并插入一些键和值。 ? 3.从HashMap恢复entry集合,如下所示。 ? 4.从上述mapEntries创建LinkedList。 由于HashMap不保持顺序,因此我们要使用LinkedHashMap。 ? 10.完整的代码如下。 ? ? ?

    2.2K20发布于 2018-09-18
  • 来自专栏cwl_Java

    经典面试题-Java中,HashMap和Hashtable的区别?

    本文链接:https://blog.csdn.net/weixin_42528266/article/details/103099482 HashMap把Hashtable的contains方法去掉了 Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map interface的一个实现。 最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap就必须为之提供外同步。 Hashtable和HashMap采用的hash/rehash算法都大概一样,所以性能不会有很大的差异。 就HashMap与HashTable主要从三方面来说。 ,而HashMap是线程序不安全的,不是同步 3.值:只有HashMap可以让你将空值作为一个表的条目的key或value

    3.3K20发布于 2019-11-18
  • 来自专栏XiaoLin笔记

    内含扩容源码的面试题,目标是手写HashMap

    Set HashSet(无序,唯一): 基于 HashMap 实现的,底层采用 HashMap 来保存元素。 Map HashMap: JDK1.8 之前 HashMap 由数组+链表组成的,数组是 HashMap 的主体,链表则是主要为了解决哈希冲突而存在的(“拉链法”解决冲突)。 HashMap的关系图 ? HashMap 中的底层原理实现 JDK 1.8 之前     JDK1.8 之前 HashMap 底层是数组 + 链表,HashMap 会使用 hashCode 以及扰动函数处理 key ,然后获取一个 默认loadFactor等于0.75,当HashMap里面容纳的元素已经达到HashMap数组长度的75%时,表示HashMap太挤了,需要扩容,在HashMap的构造器中可以定制loadFactor。

    54920发布于 2021-08-16
  • 来自专栏别明天就今天吧

    面试题-JAVA之HashMap-put方法源码分析

    HashMap的底层数据结构是数组+链表+红黑树,数组的作用显而易见,时间复杂度最低O(1),默认大小是16,数组的下标索引是通过key的hashcode计算出来的,当多个key计算出的hashcode 相同时,数组元素就会转化为链表,时间复杂度升为O(n),当链表的长度大于8并且数组的大小超过64时,链表会转化为红黑树,时间复杂度为O(log(n)),从源码角度来分析下HashMap的几个核心方法。

    92020发布于 2020-09-07
  • 来自专栏码不停蹄的小鼠松

    HashMap面试题,看这一篇就够了!

    序言 在后端的日常开发工作中,集合是使用频率相当高的一个工具,而其中的HashMap,则更是我们用以处理业务逻辑的好帮手,同时HashMap的底层实现和原理,也成了面试题中的常客。 如上面的截图代码所示,整个put方法的处理过程,可拆分为四部分: part1:特殊key值处理,key为null; part2:计算table中目标bucket的下标; part3:指定目标bucket ).toString(); System.out.println(testMap.get(str3)); ---输出--- 13 另外,我们也可以反过来想一下。 间接的后果那就更多了,比如:使用str3对象执行testMap.get(str3)操作时,可能获取不到值,更进一步的后果就是这部分无法触达的对象无法回收,导致内存泄漏。 任何情况下都不推荐使用方式3,因为会新增二次查询(通过key再一次在Map中查找value)。 另外,使用方式1时,还可以做remove操作,这个下面会讲到。

    1.4K10发布于 2019-12-18
  • 来自专栏IT技术精选文摘

    面试题:一个HashMap对象占多少字节

    HashMap内部结构比较复杂,除了一些基本的类型,还有比较复杂一点的集合类型。 以 Map<String,String> map = new HashMap<String,String>(); 这时候我们计算一下他的占用空间情况: ? 总空间为:48+16=64字节 hashmap:头部(8)+int(4*4)+float(4)+table数组引用(4)+entrySet引用(4)+keySet引用(4)+values引用(4)+padding (4)=48字节 table:头部(8+4)+长度(4)=16字节 然后我们put进去一条数据:map.put( "100002", "张明"); 当HashMap初始化的时候,他会开辟一个长度为16 hashmap:头部(8)+int(4*4)+float(4)+table数组引用(4)+entrySet引用(4)+keySet引用(4)+values引用(4)+padding(4)=48字节 table

    4.5K60发布于 2019-06-03
  • 来自专栏Java面试

    Java面试题HashMap为什么线程不安全、ConcurrentHashMap原理、ConcurrentHashMap与HashMap区别、Map总结

    Put操作的变化4)Get操作的变化2.4 ConcurrentHashMap总结3.HashMap与ConcurrentHashMap工作原理、区别、总结3.1 HashMap与ConcurrentHashMap 如果忘记可以到这里重新温习:Java面试题:ArrayList底层实现原理、HashMap的实现原理、HashMap的jdk1.7和jdk1.8有什么区别1.HashMap 为什么线程不安全1.1 概述 此时切换到线程A上,在线程A挂起时内存中值如下:e=3,next=7,newTable3=null,代码执行过程如下:newTable[3]=e ----> newTable[3]=3e=next -- [3]=e ----> newTable[3]=7e=next ----> e=3结果如下:再次进行循环:e=3next=e.next ----> next=nulle.next=newTable[3] 3.2 工作原理3.2.1 HashMapHashMap的工作原理、底层数据结构 可以查看 Java面试题:ArrayList底层实现原理、HashMap的实现原理、HashMap的jdk1.7和jdk1.8

    98310编辑于 2024-06-12
  • 来自专栏全栈程序员必看

    hashmap面试题简书_java面试问答题

    JAVA中的HashMap面试题整理 JDK1.7版本,HashMap的数据结构是什么? 数组+单向链表 什么叫做Hash桶 数组中的单向链表 HashMap的数组长度为什么必须是2的幂? 1 << 30 HashMap数组最大长度为什么是1 << 30? 因为数组长度必须是2的幂并且HashMap数组最大长度的变量为int类型,所有1<<30 什么叫做Hash碰撞/冲突? 两个对象的hash值一样,导致在数组中的下标一样 HashMap何时扩容? 元素个数>=阈值,并且存入数据的位置不等于null HashMap扩容机制是什么? 原来的2倍 HashMap存入null键的位置? hash数组下标为0的位置 什么叫做Hash回环? JDK1.8版本HashMap为什么添加红黑树的数据结构?

    47520编辑于 2022-09-22
  • 来自专栏别明天就今天吧

    面试题-JAVA之HashMap-get、resize方法源码分析

    HashMap的get方法是通过key获取对应Value的方法,resize方法则是初始化或扩容数组的方法,来看看是如何实现的; 1.get方法 ?

    51630发布于 2020-09-07
  • 来自专栏全栈程序员必看

    hashmap的实现原理面试_jvm面试题总结及答案

    3) 结构上的更改指的是删除或者插入一个元素,这样会影响到map的结构。 我们能否让HashMap同步? 可能相同,所以equals()方法用来判断对象的相等性,如果两个对象不同的话,那么返回false HashMap比较快,因为是使用唯一的键来获取对象 HashSet较HashMap来说比较慢 ④面试题 HashMap的工作原理是近年来常见的Java面试题。 几乎每个Java程序员都知道HashMap,都知道哪里要用HashMap,知道Hashtable和HashMap之间的区别,那么为何这道面试题如此特殊呢?是因为这道题考察的深度很深。 这是另外一个很热门的面试题,因为ConcurrentHashMap越来越多人用了。

    73010编辑于 2022-09-30
  • 来自专栏Java

    字节跳动面试题-HashMap底层原理与HashTable的区别

    字节跳动面试题-HashMap底层原理与HashTable的区别 HashMap底层原理解析 1. 3. 哈希冲突的解决 当不同的键经过哈希函数映射到相同的桶时,就会发生哈希冲突。HashMap使用链表或红黑树来解决哈希冲突。 3. null键值对的处理 HashMap允许键和值为null:HashMap允许键和值为null,而HashTable不允许。 hashMap.put("two", 2); hashMap.put("three", 3); // 创建一个Hashtable实例 Hashtable HashMap<String, Integer> map = new HashMap<>(); 3.

    46610编辑于 2025-01-21
  • 来自专栏编程

    3. 如何决定使用 HashMap 还是 TreeMap?

    如何决定使用 HashMap 还是 TreeMap? 结论: 如果你需要得到一个有序的结果时就应该使用TreeMap(因为HashMap中元素的排列顺序是不固定的)。 除此之外,由于HashMap有更好的性能,所以大多不需要排序的时候我们会使用HashMap。 拓展 HashMap 和 TreeMap 的实现 HashMap:基于哈希表实现。 使用HashMap要求添加的键类明确定义了hashCode()和equals()[可以重写hashCode()和equals()],为了优化HashMap空间的使用,您可以调优初始容量和负载因子。 HashMap(): 构建一个空的哈希映像 HashMap(Map m): 构建一个哈希映像,并且添加映像m的所有映射 HashMap(int initialCapacity): 构建一个拥有特定容量的空的哈希映像

    33110编辑于 2024-11-01
领券