首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

帮你面试——HashMap

这几天学习了HashMap的底层实现,但是发现好几个版本的,代码不一,而且看了Android包的HashMap和JDK中的HashMap的也不是一样,原来他们没有指定JDK版本,很多文章都是旧版本JDK1.6...现在我来分析一哈最新的JDK1.8的HashMap及性能优化。  在JDK1.6,JDK1.7中,HashMap采用位桶+链表实现,即使用链表处理冲突,同一hash值的链表都存储在一个链表里。...的构造函数 HashMap的构造方法有4种,主要涉及到的参数有,指定初始容量,指定填充比和用来初始化的Map //构造函数1 public HashMap(int initialCapacity, float...最坏的情况下,所有的key都映射到同一个桶中,这样hashmap就退化成了一个链表——查找时间从O(1)到O(n)。  随着HashMap的大小的增长,get()方法的开销也越来越大。...如果哈希值相等,HashMap希望key值最好是实现了Comparable接口的,这样它可以按照顺序来进行插入。这对HashMap的key来说并不是必须的,不过如果实现了当然最好。

38520
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    面试必问之HashMap

    问题1 hashmap原理? 问题1.1 hashmap底层数据结构是什么 哈希表结构(链表散列:数组+链表)实现,结合数组和链表的优点。当链表长度超过 8 时,链表转换为红黑树。...不能,因为在特定条件下二叉树可能会退化为线性结构 问题2 hashmap在什么条件下扩容 HashMap在什么条件下扩容? 为什么扩容是2的n次幂? 为什么要先高16位异或低16位再取模运算?...问题4 HashMap并发问题 问题4.1 HashMap 和 HashTable 有什么区别?...①、HashMap 是线程不安全的,HashTable 是线程安全的; ②、由于线程安全,所以 HashTable 的效率比不上 HashMap; ③、HashMap最多只允许一条记录的键为null,允许多条记录的值为...多线程put后可能导致get死循环 问题4.3 怎么得到线程安全的HashMap 一般情况下可以使用下面三种集合来替换hashMap,性能最好是ConcurrentHashMap HashTable

    55311

    Java 理论概念·HashMap 面试大全

    HashMap 面试大全 关于 HashMap 参考前文 Java HashMap 001 HashMap 的结构 哈希表结构(链表散列:数组+链表)实现,结合数组和链表的优点。...比如我们把对象的 hashcode 都统一返回一个常量,最终的结果就是 hashmap 会退化为一维链表,Get 方法的性能巨降为 O(n),使用红黑树可以将性能提升到 O(log(n))。...005 参数 loadFactor 作用 loadFactor 表示 HashMap 的拥挤程度,影响 hash 操作到同一个数组位置的概率。...默认 loadFactor 等于 0.75,当 HashMap 里面容纳的元素已经达到 HashMap 数组长度的 75% 时,表示 HashMap 太挤了,需要扩容,在 HashMap 的构造器中可以定制...006 HashMap 是否线程安全 当然不是,线程安全的 HashMap 是 ConcurrentHashMap。

    21320

    HashMap源码解析之面试必备

    今天我们就面试会问到关于HashMap的问题进行一个汇总,以及对这些问题进行解答。 1、HashMap的数据结构是什么? 2、为啥是线程不安全的?...以上这些问题在面试中出现的频率往往比较高,在对HashMap不太了解的情况下,往往很难将这些问题答全,笔者就带领对这块不熟悉的小伙伴们一起,一步一步解析以上的问题。...1、HashMap的数据结构是什么? 对于这个问题,笔者建议回答的时候对JAVA版本进行区分,因为不同版本下,HashMap的结构是有些差异的。...回答:在JDK1.8之前HashMap是数组+链表的形式,JDK1.8包括之后是数组+链表+红黑树。本文讲的HashMap是基于JDK1.8。 2、为啥是线程不安全的?...4、HashMap是如何处理Hash碰撞的? HashMap采用的是链表法,将hash值相同的元素放在一个链表下。 5、增加元素的方法是怎么实现的? ?

    28020

    《吊打面试官》系列-HashMap

    好了我们开始今天的面试吧,小伙子你了解数据结构中的HashMap么?能跟我聊聊他的结构和底层原理么? 切,这也太看不起我了吧,居然问这种低级问题,不过还是要好好回答。...嗯嗯面试官,我知道HashMap是我们非常常用的数据结构,由数组和链表组合构成的数据结构。...面试官您好,我们在创建HashMap的时候,阿里巴巴规范插件会提醒我们最好赋初值,而且最好是2的幂。 ?...篇幅和精力的原因我就介绍到了一部分的主要知识点,我总结了一些关于HashMap常见的面试题,大家问下自己能不能回答上来,不能的话要去查清楚哟。...HashMap常见面试题: HashMap的底层数据结构? HashMap的存取原理? Java7和Java8的区别? 为啥会线程不安全? 有什么线程安全的类代替么? 默认初始化大小是多少?

    82720

    对线面试官 - HashMap

    面试官:HashMap了解吗?能简单说说它的底层实现吗? 派大星:有过了解,首先对于HashMap在1.7之前是采用的数组+链表,并且根节点是一个entry节点,它的一个内部类。...这个顺序与新的HashMap节点顺序正好相反。T1执行完之后的顺序是B到A,而T2的顺序是A到B,这样A节点和B节点就形成了死循环 面试官:针对HashMap的死链问题有什么样的解决方案嘛?...使用synchronized或Lock加锁HashMap之后,再进行操作,相当于多线程排队执行(比较麻烦,也不建议使用)。 面试官:JDK1.7到1.8HashMap有什么其它的变化嘛?...简单来说就是HashMap在put、get的时候进行了hash算法的优化,避免了hash冲突,同时寻址算法也进行了优化。 面试官:你刚刚提到JDK1.8的HashMap增加了一个红黑树的数据结构。...面试官:不错不错。回答的很好。

    18440

    HashMap面试?我是谁?我在哪

    达摩:不是的,面试官一般都会用连环炮的方式提问的。 小鲁班:你说的连环炮是什么意思鸭? 达摩:那我举个例子 就比如问你HashMap是不是有序的? 你回答不是有序的。...那面试官就会可能继续问你,有没有有序的Map实现类呢? 你如果这个时候说不知道的话,那这块问题就到此结束了。如果你说有TreeMap和LinkedHashMap。...那么面试官接下来就可能会问你,TreeMap和LinkedHashMap是如何保证它的顺序的? 如果你回答不上来,那么到此为止。...那么面试官还会继续问你,你觉得它们两个哪个的有序实现比较好? 如果你依然可以回答的话,那么面试官会继续问你,你觉得还有没有比它更好或者更高效的实现方式。。...无穷无尽深入,直到你回答不出来或者面试官认为问题到底了 小鲁班捏了一把汗,我去。。。

    58330

    面试必会:HashMap 实现原理解读

    个人原创+1博客:点击前往,查看更多 作者:冯立彬 blog.csdn.net/fenglibing/article/details/91565912 HashMap是Java开发当中使用得非常多的一种数据结构...本文以Java8中的HashMap做为分析原型,因为不同的JDK版本中的HashMap,可能存在着底层实现上的不一样。...HashMap是通过数组存储所有的数据,每个元素所存放数组的下标,是根据该存储元素的key的Hash值与该数组的长度减去1做与运算,如下所示: index = (length_of_array - 1)...因为在单个Hash值对应的元素小于等于8个时,其查询时间最差为O(8),但是当单个Hash值对应的元素大于8个时,再通过Node的单向链表的方式进行查询,速度上就会变得更慢了;这个时候HashMap就会将...以下是一张关于HashMap存储结构的示意图: ?

    58010

    去哪面试都会问的HashMap

    前言 HashMap可以说是面试的重中之重,去10家公司面试,8家都会问道,为什么大家都爱用HashMap打开话题? HashMap是怎么实现的?...jdk1.7的HashMap是用数组+链表实现的 jdk1.8的HashMap是用数组+链表+红黑树实现的 ?...在树中查找的效率为O(logn),在链表中查找的效率为O(n) 常见面试HashMap,HashTable,ConcurrentHashMap之间的区别 对象 key和value是否允许为空 是否线程安全...HashMap key和value都允许为null 否 HashTable key和value都不允许为null 是 ConcurrentHashMap key和value都不允许为null 是 HashMap...多线程扩容,会让链表形成环,从而造成死循环 多线程put可能导致元素丢失 如何避免HashMap在高并发下的问题?

    40710
    领券