十、HashMap详解

news2024/9/25 13:24:41

文章目录

  • 小结
  • 底层源码框架
    • 特点
  • 源码详解

小结

  1. Map接口的常用实现类:HashMap、Hashtable和Properties.
  2. HashMap是Map接口使用频率最高的实现类。
  3. HashMap是以 key-val对的方式来存储数据(HashMap$Node类型)
  4. key不能重复,但是值可以重复,允许使用null键和null值。
  5. 如果添加相同的key,则会覆盖原来的key-val ,等同于修改.(key不会替换,val会替换)
  6. 与HashSet一样,不保证映射的顺序,因为底层是以hash表的方式来存储的.
  7. HashMap没有实现同步,因此是线程不安全的

底层源码框架

在这里插入图片描述

特点

  1. HashMap底层维护了Node类型的数组table,默认为null
  2. 当创建对象时,将加载因子(loadfactor)初始化为0.75.
  3. 当添加key-val时,通过key的哈希值得到在table的索引。然后判断该索引处是否有元素,如果没有元素直接添加。如果该索引处有元素,继续判断该元素的key和准备加入的key相是否等,如果相等,则直接替换val;如果不相等需要判断是树结构还是链表结构,做出相应处理。如果添加时发现容量不够,则需要广容。
  4. 第1次添加,则需要扩容table容量为16,临界值(threshold)为12.
  5. 以后再扩容,则需要扩容table容量为原来的2倍,临界值为原来的2倍,即24,依次类推.
  6. 在Java8中,如果一条链表的元素个数超过TREEIFY_THRESHOLD(默认是8),并且table的大小 >= MIN_TREEIFY_ CAPACITY(默认64),就会进行树化(红黑树)

源码详解

见第七章HashSet底层详解

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/127487.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android设计模式详解之组合模式

前言 组合模式也称为部分整体模式,结构型设计模式之一; 定义:将对象组合成树形结构以表示“部分-整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性; 使用场景: 表示对象的部分-整体的层…

屏幕录制为什么没声音?检查这2项,轻松解决

相信很多人在录制视频的时候都会遇到各种各样的问题,比如录制的视频没有声音。屏幕录制为什么没声音?今天小编就和大家分享一下如何录制音画同步视频的具体操作方法。如果你有录制的视频没有声音,你可以试试这个方法。 一、检查是否打开电脑系…

amCharts 5: Maps 附加组件

amCharts 5: Maps 附加组件 将reverseGeodata设置添加到MapPolygonSeries。如果设置为true,将反转GeoJSON数据中多边形角的方向。 向MapLine添加了新的linechanged事件。 amCharts 5:地图 amCharts:Maps是amCharts:Charts的附加组件。使用它可以将完整的…

Java学习笔记【7】面向对象

⭐ ⭐ ⭐ ⭐ ⭐ ⭐ ⭐ ⭐ ⭐ ⭐ ⭐ 🌀 个人首页:🏠 星空之路Star 🏠 🌀 所属专栏:📖 Java知识点总结 📖 🌀 大家好🤝 我是 👉老孙👈 &…

操作系统期末考试必会题库5——文件管理

1、画出文件系统的层次模型,并描述各层的功能。 2、某文件系统为一级目录,文件的数据一次性写入磁盘,已经写入的文件不可修改,但可以多次创建新文件,请回答: (1) 采用哪种文件物理结构形式更适合&#xff…

hnu计网实验二-网络基础编程实验(JAVA\Python3)

前言:这次实验用的是python语言,但是本人的python也不是很强,所以代码大部分也是借鉴别人的。实验本身还是很有趣的 一、实验目的 通过本实验,学习采用Socket(套接字)设计简单的网络数据收发程序&#xf…

Qt编写雷达模拟仿真工具

一、前言 雷达模拟仿真工具,已发布很长一段时间,一直以来没有好好整理该系列文章,在刘哥6.5的极力推荐下,整理出该系列的更加详细细节的文章出来。懒散了很久,也颓废了不少,人啊,感觉不能颓废下…

Python入门小案例: 采集全网表情包图片

前言 嗨喽,大家好呀~这里是爱看美女的茜茜呐 又到了学Python时刻~ 环境使用: Python 3.8 Pycharm 2021.2版本 模块使用: import requests >>> pip install requests -pip install -i https://pypi.doubanio.com/simple/ requests import re 安装pyt…

Revit中:该扶手的坡度可能与梯段及平台楼梯不平行问题

一、Revit中单独绘制楼梯扶手问题 单独绘制扶手的时候总是会出现梯段及平台上的楼梯不平行,这种情况怎么办? 在正常操作下楼梯会制动生成扶手,但有时候还是回碰到单独绘制扶手的时候然后就会出现这样的些问题,如图1、图2所示。 解决方法&…

(Research)深度迁移学习使循环肿瘤细胞的病变追踪成为可能

Tips: 深度迁移学习使循环肿瘤细胞的病变追踪成为可能 (Nat Commun),原文链接: https://pubmed.ncbi.nlm.nih.gov/36509761/ 摘要: CTC做为液体活检中最重要的一个目标,如果能够对 CTC 进行溯源那么就能够实现肿瘤的早…

mediasoup create/connect WebRtcTransport 流程分析

一. 前言 在这篇博客中我们介绍了 mediasoup-demo 启动流程与信令交互,关键信令包括 getRouterRtpCapabilites,join, createWebRtcTransport, connectWebRtcTransport, produce,本文将介绍 createWebRtcTransport 和 connectRtcTransport 的流…

为远程MySQL数据库配置固定的公网TCP地址【内网穿透】

在上篇文章中, 我们成功实现了在公网环境下远程连接内网MySQL数据库。但由于使用的免费的cpolar内网穿透,其所生成的公网地址为随机临时地址,24小时内会发生变化,对于需要长期远程访问的用户来讲非常不方便。因此,本篇…

华为云CDN加速服务,让企业用户上网“走高速”

如今CDN技术在互联网项目中越来越被广泛应用,虽然大多数人对于CDN并不熟悉,但其实我们的日常生活中的看新闻、看直播、网上购物等,都在无形之中跟CDN息息相关。 华为云CDN是通过部署广泛的节点服务器,将源站内容分发给靠近用户的智…

【修改】对“C语言实现轰炸代码”进行修改和完善

场景: 使用C语言实现“轰炸”效果,就是多条重复表情或信息的发送;使用场景是在QQ上面。 问题描述 1.不兼容,对于VS2022或者其他VS编译器无法实现效果。 2.代码能正常运行但无法弹出窗口进行发信息。 原因分析: 1.不…

力扣 2032. 至少在两个数组中出现的值

题目 给你三个整数数组 nums1、nums2 和 nums3 ,请你构造并返回一个 元素各不相同的 数组,且由 至少 在 两个 数组中出现的所有值组成。数组中的元素可以按 任意 顺序排列。 示例 输入:nums1 [1,1,3,2], nums2 [2,3], nums3 [3] 输出&a…

Day843.CompletableFuture -Java 并发编程实战

CompletableFuture Hi,我是阿昌,今天学习记录的是关于CompletableFuture的内容。 前面不止一次提到,用多线程优化性能,其实不过就是将串行操作变成并行操作。 如果仔细观察,还会发现在串行转换成并行的过程中&#…

堆树和堆排序

一、堆树 1、定义 堆树的定义如下: (1)堆树是一颗完全二叉树。 (2)堆树的每一个结点值都大于等于或者小于等于其左右子结点的值。 (3)堆树中每个结点的子树都是堆树。为什么是大于等于或者小于…

一口气讲透Redis分布式缓存、秒杀 + 思维导图

一、分布式缓存 1、单点Redis的问题 1、数据丢失问题 Redis数据持久化。 2、并发能力问题 大家主从集群,实现读写分离。 3、故障恢复问题 利用Redis哨兵,实现健康检测和自动恢复。 4、存储能力问题 搭建分片集群,利用插槽机制实现动…

【Linux 常用监控指标总结】

1. Linux运维基础采集项 做运维,不怕出问题,怕的是出了问题,抓不到现场,两眼摸黑。所以,依靠强大的监控系统,收集尽可能多的指标,意义重大。但哪些指标才是有意义的呢,本着从实践中…

【JavaScript】定时器详解

文章目录【JavaScript】定时器详解一. 定时器分类二. 定时器的使用三. 案例:实现抽奖效果样式一样式二【JavaScript】定时器详解 一. 定时器分类 延迟定时器 setTimeout(function(){}, 毫秒数)作用:隔一段时间之后执行 间隔定时器 setInterval(functio…