当前位置: 首页 > news >正文

说一下 HashMap 的实现原理?

微信搜索《Java鱼仔》,每天一个知识点不错过

(一)每天一个知识点

说一下 HashMap 的实现原理?

(二)结论

(2.1)HashMap的特点

HashMap底层是一个哈希表,以数组加链表的形式存储值。HashMap具有以下特点:

1.HashMap允许key和value为空

2.HashMap是线程不安全的

3.HashMap的初始容量为16,负载因子大小为0.75

4.在jdk7.0中,底层是数组加链表;在jdk8.0中,底层是数组加链表加红黑树

(2.2)HasnMap的put操作

HashMap中维护了Node类型的数组table,当HashMap创建对象时,设置负载因子为0.75,table还是null。

当第一次添加元素时,将table的容量设置为16,临界值设置为12

每次添加元素调用putVal方法:

1.将key的hash值和table容量-1进行与运算,得到索引值

2.判断该存放位置上是否有元素,如若没有元素则直接放上去;如果该索引位置已存在元素,则继续判断

3.如果该位置的元素和添加元素相等,则直接覆盖,如果不相等,则继续判断是链表结构还是树状结构,按照相对应的方式添加。

如果添加的数量大于临界值,执行resize方法对容量双倍扩容。并打乱顺序重新排列。

(三)再多学一点

我专门写了一篇博客对HashMap、HashTable、TreeMap的底层源码进行分析和对比,大家可以看下:
java集合深入理解(五):HashMap、HashTable、TreeMap的底层源码分析和对比

相关文章:

  • 两个对象的 hashCode()相同,则 equals()也一定为 true吗?
  • 抽象类必须要有抽象方法吗?抽象类能使用 final 修饰吗?
  • CLion 2016.1新增Python、Swift支持,并改进了C++支持
  • SpringBoot如何实现异步、定时任务?
  • Java中BIO、NIO、AIO 有什么区别?
  • 网络协议系列之二:HTTP(2)
  • redis和mysql数据不一致问题如何解决?
  • Spring中的资源加载策略
  • 你知道迭代器 Iterator 是什么吗?
  • 什么是乐观锁、什么是悲观锁,两种锁在Java中的具体应用场景有哪些
  • Error: Out of memory! attempting SFTP connectio
  • 谈一谈session和cookie的区别,以及session的实现机制
  • Android--activity获取返回值
  • 你能说出四种创建线程的方式吗?
  • IOS 多线程01-线程基础知识
  • ----------
  • $translatePartialLoader加载失败及解决方式
  • 【个人向】《HTTP图解》阅后小结
  • Codepen 每日精选(2018-3-25)
  • iBatis和MyBatis在使用ResultMap对应关系时的区别
  • javascript数组去重/查找/插入/删除
  • JavaWeb(学习笔记二)
  • Java知识点总结(JavaIO-打印流)
  • k个最大的数及变种小结
  • Redis 中的布隆过滤器
  • Solarized Scheme
  • SpriteKit 技巧之添加背景图片
  • Vue.js 移动端适配之 vw 解决方案
  • vue和cordova项目整合打包,并实现vue调用android的相机的demo
  • Yeoman_Bower_Grunt
  • 包装类对象
  • 初探 Vue 生命周期和钩子函数
  • 聊聊springcloud的EurekaClientAutoConfiguration
  • 手机端车牌号码键盘的vue组件
  • 腾讯优测优分享 | Android碎片化问题小结——关于闪光灯的那些事儿
  • 详解移动APP与web APP的区别
  • 移动互联网+智能运营体系搭建=你家有金矿啊!
  • 【云吞铺子】性能抖动剖析(二)
  • 你学不懂C语言,是因为不懂编写C程序的7个步骤 ...
  • #多叉树深度遍历_结合深度学习的视频编码方法--帧内预测
  • #周末课堂# 【Linux + JVM + Mysql高级性能优化班】(火热报名中~~~)
  • (30)数组元素和与数字和的绝对差
  • (Matalb时序预测)WOA-BP鲸鱼算法优化BP神经网络的多维时序回归预测
  • (原創) 人會胖會瘦,都是自我要求的結果 (日記)
  • (原創) 是否该学PetShop将Model和BLL分开? (.NET) (N-Tier) (PetShop) (OO)
  • (转)【Hibernate总结系列】使用举例
  • (转)GCC在C语言中内嵌汇编 asm __volatile__
  • .htaccess配置常用技巧
  • .Net CF下精确的计时器
  • .NET Framework 和 .NET Core 在默认情况下垃圾回收(GC)机制的不同(局部变量部分)
  • .net web项目 调用webService
  • .Net中wcf服务生成及调用
  • /usr/local/nginx/logs/nginx.pid failed (2: No such file or directory)
  • @Autowired自动装配
  • [2024最新教程]地表最强AGI:Claude 3注册账号/登录账号/访问方法,小白教程包教包会