day15_java_基础知识巩固

简介: 自己所掌握的基础知识加以巩固和记录!希望大家点赞收藏并能给予鼓励和支持!有任何建议或者帮助也可以来哦!

Hashmap 的底层原理:

HashMap 在 JDK1.8 之前的实现方式 数组+链表,

但是在 JDK1.8 后对 HashMap 进行了底层优化,改为了由 数组+链表或者数值+红黑树

实现,主要的目的是提高查找效率。

1. Jdk8 数组+链表或者数组+红黑树实现,当链表中的元素超过了 8 个以后, 会

将链表转换为红黑树,当红黑树节点 小于 等于 6 时又会退化为链表。

2. 当 new HashMap():底层没有创建数组,首次调用 put()方法示时,底层创建长度

为 16 的数组,

jdk8 底层的数组是:Node[],而非 Entry[],用数组容量大小乘以加载因子得

到一个值,一旦数组中存储的元素个数超过该值就会调用 rehash 方法将数组容量增加到原

来的两倍,专业术语叫做扩容,在做扩容的时候会生成一个新的数组,原来的所有数据需要

重新计算哈希码值重新分配到新的数组,所以扩容的操作非常消耗性能.

默认的负载因子大小为 0.75,数组大小为 16。也就是说,默认情况下,那么当 HashMap

中元素个数超过 16*0.75=12 的时候,就把数组的大小扩展为 2*16=32,即扩大一倍。

3. 在我们 Java 中任何对象都有 hashcode,hash 算法就是通过 hashcode 与自己进

行向右位移 16 的异或运算。这样做是为了计算出来的 hash 值足够随机,足够分散,还有

产生的数组下标足够随机,

map.put(k,v)实现原理

(1)首先将 k,v 封装到 Node 对象当中(节点)。

2)先调用 k 的 hashCode()方法得出哈希值,并通过哈希算法转换成数组的下标。

(3)下标位置上如果没有任何元素,就把 Node 添加到这个位置上。如果说下标对应的位

置上有链表。此时,就会拿着 k 和链表上每个节点的 k 进行 equal。如果所有的 equals 方

法返回都是 false,那么这个新的节点将被添加到链表的末尾。如其中有一个 equals 返回了

true,那么这个节点的 value 将会被覆盖。

map.get(k)实现原理

(1)、先调用 k 的 hashCode()方法得出哈希值,并通过哈希算法转换成数组的下标。

(2)、在通过数组下标快速定位到某个位置上。重点理解如果这个位置上什么都没有,则返

回 null。如果这个位置上有单向链表,那么它就会拿着参数 K 和单向链表上的每一个节点

的 K 进行 equals,如果所有 equals 方法都返回 false,则 get 方法返回 null。如果其中一

个节点的 K 和参数 K 进行 equals 返回 true,那么此时该节点的 value 就是我们要找的 value

了,get 方法最终返回这个要找的 value。

4. Hash 冲突

不同的对象算出来的数组下标是相同的这样就会产生 hash 冲突,当单线链表达到一定长度

后效率会非常低。

5. 在链表长度大于 8 的时候,将链表就会变成红黑树,提高查询的效率。


相关文章
|
Linux C语言 Windows
荔枝派Zero(全志V3S)一键镜像烧录(windows和linux下)
搞到了一块荔枝派Zero,其CPU为全志V3S, ARM Cortex-A7, 最高1.2GHz,不得不说这小东西能达到这么高的主频真是让我大为震撼,废话不多说,先让其跑起来,证明板子是好的
1383 0
|
9月前
|
编解码 Linux Android开发
安卓手机投屏电脑端教程,手机投屏教程,可以手机和电脑互传文件。电脑管理手机文件和APP等操作
QtScrcpy是一款基于Scrcpy开发的跨平台安卓投屏工具,支持Windows、macOS、Linux系统。无需在手机安装应用,通过USB或Wi-Fi连接即可实现高清低延迟投屏,支持文件互传、屏幕录制、截图、多设备管理等功能,操作简便,适合开发者与普通用户使用。
1107 47
|
8月前
|
传感器 算法 物联网
蓝牙定位追踪技术:从技术原理、核心优势详解(一)
蓝牙定位追踪技术利用RSSI或AoA/AoD,通过信标、网关或多天线阵列实现室内精准定位,具备低功耗、低成本、易部署、抗干扰强等优势,广泛应用于工业、仓储、楼宇等场景的人员与资产管理。如果您想进一步了解维构lbs智能定位的技术和案例,欢迎搜索、关注、评论留言~
|
安全 量子技术 数据安全/隐私保护
量子密钥分发:下一代信息安全基石
量子密钥分发:下一代信息安全基石
679 72
|
人工智能 自然语言处理 搜索推荐
蚂蚁百宝箱体验:如何快速创建“旅游小助手”AI智能体
蚂蚁百宝箱作为站式智能体应用开发平台,致力于为AI开发者提供**简单、高效、快捷**的智能体创作体验。作为业内领先的AI应用开发平台,开发者可以根据自身的个性化需求,基于各式各样的大模型来创建一个属于自己的智能体应用。
1269 41
|
Python
Python中Cp、Cpk、Pp、Ppk的计算与应用
总的来说,Cp、Cpk、Pp、Ppk是衡量过程能力的重要工具,它们可以帮助我们了解和改进生产过程,提高产品质量。
2124 13
|
Android开发
Android Studio入门之常用布局的讲解以及实战(附源码 超详细必看)(包括线性布局、权重布局、相对布局、网格布局、滚动视图 )
Android Studio入门之常用布局的讲解以及实战(附源码 超详细必看)(包括线性布局、权重布局、相对布局、网格布局、滚动视图 )
1187 0
阿里云服务器购买后,怎么申请开具发票?
阿里云用户可在用户中心的发票管理页面开具电子或纸质发票。首次开票需设置发票抬头,支持个人或企业,可选增值税普通或专用发票。个人账号无法直接开企业发票,需变更实名认证。发票税率因产品而异,通常为6%或13%。发票抬头可修改,纸质发票邮寄费用由阿里云承担(特殊情况除外)。电子发票同样可报销。更多详情见阿里云帮助中心。
1370 106
|
人工智能
又快又准,即插即用!清华8比特量化Attention,两倍加速于FlashAttention2,各端到端任务均不掉点!
清华大学研究团队提出SageAttention,一种高效的8比特量化Attention方法,旨在解决Transformer模型中Attention机制计算复杂度高的问题。SageAttention通过合理的量化策略,实现了计算效率的显著提升,同时保持了高精度。实验结果显示,SageAttention在多种任务中表现优异,为Transformer模型的推理加速提供了新的解决方案。
857 2
|
人工智能 安全 数据挖掘
AI时代,如何问数查数更轻松?(1)
AI时代,如何问数查数更轻松?
1216 4

热门文章

最新文章