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

    HashMap 精选面试题(背诵版)

    对于 Java 求职者来说,HashMap 可谓是重中之重,是面试的必考点。然而 HashMap 的知识点非常多,复习起来花费精力很大。 JDK 7 中,HashMap 由“数组+链表”组成,数组是 HashMap 的主体,链表则是主要为了解决哈希冲突而存在的。 在 JDK 8 中,HashMap 由“数组+链表+红黑树”组成。 会取大于或等于这个数的 且最近的2次幂作为 table 数组的初始容量,使用tableSizeFor(int)方法,如 tableSizeFor(10) = 16(2 的 4 次幂),tableSizeFor 10HashMap 的put方法流程? 11、HashMap 的扩容方式? HashMap 在容量超过负载因子所定义的容量之后,就会扩容。 详情参照这篇 12、一般用什么作为HashMap的key?

    97430编辑于 2021-12-23
  • 来自专栏小赵的Java学习

    面试题HashMap和HashTable的区别

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

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

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

    10.说说你对红黑树的见解? 11.jdk8中对HashMap做了哪些改变? 12.HashMap,LinkedHashMap,TreeMap有什么区别? 13.HashMap&TreeMap&LinkedHashMap使用场景? 14.HashMap和HashTable有什么区别? 15.Java中的另一个线程安全的与HashMap极其类似的类是什么? 10.说说你对红黑树的见解? ①、HashMap是线程不安全的,HashTable是线程安全的; ②、由于线程安全,所以HashTable的效率比不上HashMap; ③、HashMap最多只允许一条记录的键为null, 如果我们通过initialCapacity/ 0.75F + 1.0F计算,7/0.75 + 1 = 10 ,10经过Jdk处理之后,会被设置成16,这就大大的减少了扩容的几率。

    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( 这一点与乐观锁,SVN的思想是比较类似的) 使用HashTable(基本是废弃的) HashTable就是把HashMap套上了一个Synchronized Collections.synchronizedMap

    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官方的插件 <! 执行测试 } @Benchmark public void noSizeTest(Blackhole blackhole) { Map map = new HashMap

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

    JAVA面试题HashMap和Hashtable的区别

    HashMap和Hashtable的区别 1.共同点:都是双列集合,底层都是哈希算法 2.区别: * 1.HashMap是线程不安全的,效率高,JDK1.2版本 * Hashtable是线程安全的 { public static void main(String []args){ HashMap<String,Integer> hm=new HashMap<>(); 虽然Hashtable比HashMap出现的早一些,但是现在Hashtable基本上已经被弃用了。而HashMap已经成为应用最为广泛的一种数据类型了。 因此,在HashMap中不能由get()方法来判断HashMap中是否存在某个键, 而应该用containsKey()方法来判断。 HashMap为了加快hash的速度,将哈希表的大小固定为了2的幂。当然这引入了哈希分布不均匀的问题,所以HashMap为解决这问题,又对hash算法做了一些改动。

    98010编辑于 2022-10-01
  • 来自专栏好好学java的技术栈

    Java 集合系列10HashMap深入解析(1)

    概要 这一章,我们对HashMap进行学习。 我们先对HashMap有个整体认识,然后再学习它的源码,最后再通过实例来学会使用HashMap。 第1部分 HashMap介绍 HashMap简介 HashMap 是一个散列表,它存储的内容是键值对(key-value)映射。 size是HashMap的大小,它是HashMap保存的键值对的数量。 threshold是HashMap的阈值,用于判断是否需要调整HashMap的容量。 第3部分 HashMap源码解析(基于JDK1.6.0_45) 为了更了解HashMap的原理,下面对HashMap源码代码作出分析。 ,将“旧HashMap”的全部元素添加到“新HashMap”中, // 然后,将“新HashMap”赋值给“旧HashMap”。

    56430发布于 2019-09-18
  • 来自专栏全栈程序员必看

    10分钟拿下 HashMap「建议收藏」

    目录 1、什么是 HashMap,什么时候选择 HashMap? 2、HashMap 数据结构及其工作原理? 2.1 数据结构 2.2 工作原理 3、HashMap和HashTable 的异同? 4、如何优化 HashMap? ---- 1、什么是 HashMap,什么时候选择 HashMap? 带着问题来学习一下HashMap数据结构及其工作原理。 2、HashMap 数据结构及其工作原理? hashMap 用与运算主要是提升计算性能。 4、如何优化 HashMap? 初始化 HashMap 的时候,我们可以自定义数组容量及加载因子的大小。

    38921编辑于 2022-08-02
  • 来自专栏好好学java的技术栈

    Java 集合系列10HashMap深入解析(2)

    第3.1部分 HashMap的“拉链法”相关内容 3.1.1 HashMap数据存储数组 transient Entry[] table; HashMap中的key-value都是存储在Entry数组中的 第3.2部分 HashMap的构造函数 HashMap共包括4个构造函数 // 默认构造函数。 例如,我们调用HashMap“带有Map”的构造函数,它绘将Map的全部元素添加到HashMap中; 但在添加之前,我们已经计算好“HashMap的容量和阈值”。 HashMap map = new HashMap(); // 添加操作 map.put("one", r.nextInt(10)); map.put("two", r.nextInt(10)); map.put("three", r.nextInt(10)); // 打印出map System.out.println

    84640发布于 2019-09-18
  • 来自专栏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的关系图 ? 默认loadFactor等于0.75,当HashMap里面容纳的元素已经达到HashMap数组长度的75%时,表示HashMap太挤了,需要扩容,在HashMap的构造器中可以定制loadFactor。 */ public void ensureCapacity(int minCapacity) { //如果元素数组不为默认的空,则 minExpand 的值为0,反之值为10 int minExpand

    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的底层实现和原理,也成了面试题中的常客。 一、JDK7中的HashMap底层实现 1.1 基础知识 不管是1.7,还是1.8,HashMap的实现框架都是哈希表 + 链表的组合方式。结构图如下: ? HashMap中的Iterator实现原理也不过如此,就是这么朴实无华,是不是都想动手自己撸一个HashMap的实现了?嗯,你可以的!!! $HashIterator.nextNode(HashMap.java:1437) at java.util.HashMap$EntryIterator.next(HashMap.java:1471) 二、JDK8中的HashMap底层实现 前面我们已经详细剖析了HashMap在JDK7中的实现,不知大家有没有发现其中可以优化的地方?

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

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

    成员,继承自AbstractList类,那么对于一个 list = new ArrayList<String>(); list.add("String");的list来说,它拥有两个int,一个大小为10 的数组(当 list.add() 第一个元素的时候,它会初始化elementData为一个长度10的数组) ArrayList: 头部(8+4)+int(4)+int(4)+数组引用(4)=24字节 elementData[] : 头部(8+4)+长度(4)+string引用(4*10)=56字节 "String"字符串:这个我们之前计算过了,为56字节 所以,总空间大小为24+56+56=136字节 HashMap 类结构图 ? HashMap内部结构比较复杂,除了一些基本的类型,还有比较复杂一点的集合类型。

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

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

    如果忘记可以到这里重新温习:Java面试题:ArrayList底层实现原理、HashMap的实现原理、HashMap的jdk1.7和jdk1.8有什么区别1.HashMap 为什么线程不安全1.1 概述 newTable[i] = e; e = next; } }}在对table进行扩容到newTable后,需要将原来数据转移到newTable中,注意10 除此之前,还有代码的第38行处++size,假设线程A、B同时进行put操作,当前HashMap的zise大小为10,当线程A执行到第38行代码时,从主内存中获得size的值为10后准备进行+1操作,但是由于时间片耗尽只好让出 CPU;线程B拿到CPU还是从主内存中拿到size的值10进行+1操作,完成了put操作并将size=11写回主内存,然后线程A再次拿到CPU并继续执行(此时size的值仍为10),当执行完put操作后 3.2 工作原理3.2.1 HashMapHashMap的工作原理、底层数据结构 可以查看 Java面试题:ArrayList底层实现原理、HashMap的实现原理、HashMap的jdk1.7和jdk1.8

    98310编辑于 2024-06-12
  • 来自专栏对线JAVA面试

    10道MySQL面试题

    union all 则会显示重复结果,只是简单的两个结果合并并返回.所以效率比union高,在保证没有重复数据的情况下用union all. 10. SQL语言包括哪几部分?

    55040编辑于 2022-10-27
  • 来自专栏全栈程序员必看

    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
领券