数据存储底层?

数据底层具体存储是一个Node<K,V>

HashMap 是基于哈希来映射的,那当映射冲突时候怎么解决?

链地址,数组+链表

HashMap 什么时候扩容?

负载因子 loadFactor

HashMap jdk7和8的区别?

HashMap是数组+链表+红黑树(JDK1.8增加了红黑树部分),链表长度大于8时转化为红黑树

HashMap是线程安全的吗?为什么?或者说什么情况下会出现?

不是,在扩容的时候会出现死循环,环形链表

HashMap底层数组的长度为什么总是2的n次方?这样设计的意义是什么?

当length总是2的n次方时,h& (length-1)运算等价于对length取模,也就是h%length,但是&比%具有更高的效率。

扩容后,不需要重新计算索引位置,只需要看看原来的hash值新增的那个bit是1还是0就好了,是0的话索引没变,是1的话索引变成“原索引+oldCap”,

简单说说根据key获取哈希桶数组索引位置?

取key的hashCode值 h = key.hashCode()

高位运算  h ^ (h >>> 16)

取模运算 h & (length-1);

参考:http://www.importnew.com/20386.html

聊聊 HashMap的更多相关文章

  1. 死磕Java之聊聊HashMap源码(基于JDK1.8)

    死磕Java之聊聊HashMap源码(基于JDK1.8) http://cmsblogs.com/?p=4731 为什么面试要问hashmap 的原理

  2. 谈谈HashMap与HashTable

    谈谈HashMap与HashTable HashMap 我们一直知道HashMap是非线程安全的,HashTable是线程安全的,可这是为什么呢?先聊聊HashMap吧,想要了解它为什么是非线程安全的 ...

  3. HashMap 源码详细分析(JDK1.8)

    一.概述 本篇文章我们来聊聊大家日常开发中常用的一个集合类 - HashMap.HashMap 最早出现在 JDK 1.2中,底层基于散列算法实现.HashMap 允许 null 键和 null 值, ...

  4. 死磕Java之聊聊ThreadLocal源码(基于JDK1.8)

    记得在一次面试中被问到ThreadLocal,答得马马虎虎,所以打算研究一下ThreadLocal的源码 面试官 : 用过ThreadLocal吗? 楼主答 : 用过,当时使用ThreadLocal的 ...

  5. 聊聊ThreadLocal源码(基于JDK1.8)

    原文:https://cloud.tencent.com/developer/article/1333298 聊聊JDK源码中ThreadLocal的实现 主要方法: ThreadLocal的get方 ...

  6. HashMap源码阅读笔记

    HashMap源码阅读笔记 本文在此博客的内容上进行了部分修改,旨在加深笔者对HashMap的理解,暂不讨论红黑树相关逻辑 概述   HashMap作为经常使用到的类,大多时候都是只知道大概原理,比如 ...

  7. 面试级解析HashMap

    ------------恢复内容开始------------ 在介绍HashMap之前,有必要先给大家介绍一些参数的概念 HashMap的最大容量,capacity译为容量,capacity就是指Ha ...

  8. java中的Collection集合类

    随着1998年JDK 1.2的发布,同时新增了常用的Collections集合类,包含了Collection和Map接口.而Dictionary类是在1996年JDK 1.0发布时就已经有了.它们都可 ...

  9. 2019年春招Android方向腾讯电话面试

    第一问:TCP与UDP的区别 参考答案: 1.基于连接与无连接 2.TCP要求系统资源较多,UDP较少: 3.UDP程序结构较简单 4.流模式(TCP)与数据报模式(UDP); 5.TCP保证数据正确 ...

随机推荐

  1. [JAVA]字节数组流

    import java.io.*; public class ByteArrayStream { public static void main(String[] args) { byte[] dat ...

  2. 搞懂iobuffer就得先学习bytebuffer

    ByteBuffer前前后后看过好几次了,实际使用也用了一些,总觉得条理不够清晰. <程序员的思维修炼>一本书讲过,主动学习,要比单纯看资料效果来的好,所以干脆写个详细点的文章来记录一下. ...

  3. python3-基础7

    协程函数 面向过程编程 递归与二分法 内置函数   lambda 模块与包的使用 import from ... import ... 常用模块 ########################### ...

  4. 弹框时(如大于body的高度),锁死body,使其不能滚动

    if(flag){ document.body.style.height = '100vh' document.body.style['overflow-y'] = 'hidden' }else{ d ...

  5. linux使用shell脚本停止java进程

    使用shell脚本停止java进程,过程就是先查出对应的java进程pid,然后kill掉 - | 其中xxx是对应进程的关键词(即从查出的所有java进程中分辨出目标进程)

  6. 你云我云•兄弟夜谈会 第三季 企业IT架构

    你云我云•兄弟夜谈会 第三季 企业IT架构 你云我云•兄弟夜谈会 第二季 5G 你云我云•兄弟夜谈会 第一季 企业云 0. 概况 时间:2019年2月23日 22:00~23:30 主题:企业IT架构 ...

  7. 访问arcserver中的featureServer服务

    1.在arcmap中加载图层,并发布成arcser服务(服务名dizhi),记住勾选FeatureServer服务 2.在arcserver manger中查看刚才发布的服务 3.访问featureS ...

  8. C++调用JS函数

    1 调用方法 https://blog.csdn.net/donglinshengan/article/details/29828103 https://blog.csdn.net/sunmz_wjx ...

  9. C语言的“编译、链接”

    我们写的代码,仅仅是文本文件(txt),不管后缀怎么变,终究是文本文件,计算机只能显示,不能做事(执行). 文本文件通过“编译.链接”,成为可执行文件(windows下是exe): 编译:生成.o文件 ...

  10. Java Gui坐标绝对布局

    JFrame 要setLayout 为null setSize 设置大小 setLocation 设置位置 下面是自己准备做的一个QQ群助手,抓的是qun.qq.com的协议 这是界面设计图 运行效果 ...