HashMap

一篇搞懂HashMap,手写HashMap 手撕HashMap 阅读详情

jdk8中HashMap类的属性解析


jdk8中HashMap类的属性解析
首先,看一下此类声明:
public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable


属性:


类名:java.util.HashMap:
属性:

private static final long serialVersionUID:序列化

static final int DEFAULT_INITIAL_CAPACITY:默认初始容量,大小为16

static final int MAXIMUM_CAPACITY:默认最大容量 2的30次方

static final float DEFAULT_LOAD_FACTOR:默认负载因子

static final int TREEIFY_THRESHOLD

static final int UNTREEIFY_THRESHOLD

static final int MIN_TREEIFY_CAPACITY

transient java.util.HashMap.java.util.HashMap$Node<K, V>[] table:HashMap中数据存放在此数组中,扩容。所有视图操作的对象

transient java.util.Set<java.util.Map.java.util.Map$Entry<K, V>> entrySet:entry视图,entrySet()方法的返回值,返回的是一个HashMap内部自定义的EntrySet视图对象

transient int size:hashmap中实际存放元素个数

transient int modCount:记录hashmap结构修改次数,增,删,改元素,主要与迭代器快失败有关

int threshold:扩容上限值,与size属性共同决定是否需要扩容

final float loadFactor:指定的负载因子,不指定的话等于DEFAULT_LOAD_FACTOR属性值


类名:java.util.AbstractMap:
属性:

transient volatile java.util.Set<K> keySet:keySet()返回值,返回的是一个HashMap内部自定义的KeySet视图对象

transient volatile java.util.Collection<V> values:values()返回值,返回值的一个HashMap内部自定义的类型为Value的Collection视图对象


HashMap常用方法:

put(Key, Value):插入/修改键值对
remove(object):删除键值对
replace(K,V):修改键值对
get(Object):根据Key,得到Value
keySet():Key集合
values():Value集合
entrySet():健值对集合
clear():清空Map

size():键值对数

containsKey(Object key):是否存在键

containsValue(Object value):值存在性
要注意的是在map接口中没有iterator()方法,要想遍历Map,可以通过三个内部自定义集合间接进行迭代操作。

 

在HashMap可表大小一定为2n,原因可能有两个:
1、在计算机中,位运算效率高。哈希算法的优点就在于他的效率,哈希算法的好坏对于效率影响很大,用位运算代替除法进行哈值计算可以提高哈希算法的效率。
2、哈希表的空间利用率一般只有50%,这可以从reszie条件threshold的值为负载因子与容量的积看出。在HashMap中扩容操作只会把容量扩大一倍。


HashMap深入了解:

HashMap深度解析(一):http://blog.youkuaiyun.com/csharpxuexi/article/details/39254281

HashMap深度解析(二):http://blog.youkuaiyun.com/csharpxuexi/article/details/39254401

CUDA详细安装及环境配置——环境配置指南 – CUDA+cuDNN+PyTorch 安装 本文详细介绍了如何确定显卡支持的CUDA版本、选择对应的cuDNN版本,并逐步安装CUDA、cuDNN和PyTorch。首先,通过命令行输入nvidia-smi.exe查看显卡支持的CUDA版本。接着,根据CUDA版本选择对应的cuDNN版本并下载。然后,从NVIDIA官方网站下载CUDA安装包,按照提示进行安装,并检查是否安装成功。同样地,下载cuDNN安装包,解压后将文件拷贝到CUDA安装目录中,并通过命令行验证安装是否成功。最后,根据PyTorch官网的指引,选择合适的安装命令进行PyTorch的安装 阅读详情

相关推荐

【前端HTML生成条形码——MQ】

本文将展示前端HTML如何根据用户输入内容生成对应的条形码,附HTML和JS代码。代码如下(示例):

weixin_42588676的博客 1955

Java源码阅读---HashMap源码解析

HashMap中的put、get、remove方法的源码解读

DT-TK 543

revit二次开发环境搭建(2024版)(小白友好)

revit二次开发环境配置,SDK、addin manager和lookup新手友好安装教程

m0_56961251的博客 1420

HashMap源码分析

声明:以下内容均基于JDK1.8 HashMap类图 HashMap是java.util包下的Map接口下的一个子类,也是我们常用的容器,是一个支持自动扩容、无序的key-value映射容器。 AbstractMap抽象类:Map接口下的默认实现抽象类,实现一些Map通用的方法。 Cloneable接口:实现对象拷贝必须要实现的接口。 Serializable接口:实现序列化必须要实...

清欢 407

哨兵1号(Sentinel-1)雷达SAR数据预处理全流程:从下载到精确配准

本文详细介绍了哨兵1号(Sentinel-1)雷达SAR数据从下载到精确配准的全流程预处理方法。内容涵盖SLC与GRD数据选择、ASF平台下载技巧,并重点解析了使用SNAP软件进行几何校正、辐射定标及高精度配准的核心步骤,为InSAR形变监测等应用提供可靠的数据基础。

weixin_29208327的博客 478

CKA-CN考试之路----1

后的的任意位置,但-n 和autoscale 必须是相连的.后面不再对命名空间部分做解释了.说明配置正确,如果无法保存退出,再次检查对齐.不用怀疑一定是复制的时候少了字母或者对齐出错.运行以下命令确认红色箭头的值和题目要求是否一致。将文档中的内容复制并粘贴到对应位置.,后续不再提醒yaml的对齐。确认脚本check1.sh。

Q先生 606

Java 8 HashMap 详解

TREEIFY_THRESHOLD(链表转化为红黑树的阈值) 见 MIN_TREEIFY_CAPACITY。 static final int TREEIFY_THRESHOLD = 8; UNTREEIFY_THRESHOLD(红黑树转化为链表的阈值) 见 split(HashMap map, Node[] tab, int index, int bit)。 static final int UNTREEIFY_THRESHOLD = 6; MIN_TREEIFY_CAPACITY(最小的

weixin_45033002的博客 674

使用VNA(Vector Network Analyzer)对S参数进行去嵌(一)

传统上,RF和微波组件被设计成具有同轴接口的封装。通过连接一系列这些单独的同轴设备,可以容易地制造复杂的系统。使用使用类似同轴接口的标准测试设备可以很容易地测量这些部件和系统的性能。然而,现代系统需要更高水平的组件集成、更低的功耗和更低的制造成本。射频组件正在迅速从使用昂贵同轴接口的设计转向使用印刷电路板和表面贴装技术(SMT)的设计。传统的同轴接口甚至可以从最终产品中取消。这就给设计者留下了用需要同轴接口的测试设备测量这些射频和微波组件性能的问题。解决方案是使用连接同轴和非同轴传输线的测试夹具。

小孟同学的博客 1万+

最新百度面试总结_为什么 untreeify_threshold 定为6 ,GitHub标星3.2K

但是还需要重写hashcode方法,未重写之前hashcode方法返回的是对象的32位JVM内存地址,不同地址的相同对象放进HashMap里面的时候它们不被看成是同一个对象,所以需要重写hashcode方法。如果被请求的共享资源空闲,则将当前请求资源的线程设置为有效的工作线程,并将共享资源设置为锁定状态,如果被请求的共享资源被占用,那么就需要一套线程阻塞等待以及被唤醒时锁分配的机制,这个机制AQS是用CLH队列锁实现的,即将暂时获取不到锁的线程加入到队列中。两个对象相等,则它们的hashcode一定相等。

2401_84925152的博客 811

Linux Kernel入门到精通系列讲解(RV-Kernel 篇) 5.3 从零移植 busybox,基于RISC-V

上一章节我们已经成功启动了`Ubuntu`,但是由于`Ubuntu`占用系统空间过大,所以我转向占用较小的`busybox`,预计就占用`30M`左右。开始移植busybox,基于riscv64

DSMGUOGUO的博客 856

DBC中如何实现报文传输类型属性的配置

AUTOSAR中CAN报文的传输类型主要有三种,周期型,事件型和混合型。周期型:按固定时间间隔自动发送,无需额外的触发条件。事件型:当信号值变化或满足内部条件时立即发送。混合型:默认按周期发送,但事件触发时可提前发送。

sunchengl的博客 304

【面试考点】HashMap的扩容机制、put详解、源码分析,考点问题解答

静态变量介绍 static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16

passerbyYSQ 1580

把 ST03 的历史数据留得更久:ABAP Workload 统计保留期设置、原理与落地避坑指南

SAP ST03性能数据保留期配置指南 ST03/ST03N是SAP系统性能分析的核心工具,但默认数据保留期通常较短(3个月左右),难以满足跨季度对比、年度规划等需求。本文详细解析了ST03数据保留期的配置方法及注意事项: 数据存储机制:性能数据存储在监控库中,通过定期重组作业清理过期数据 配置路径:7.0+系统在"Workload Collector Database→Reorganization→Control"中按Profile分别设置 关键限制:保留期最大值建议不超过99,否则可

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 218

什么是HashMap?什么情况下使用HashMap?

这里是修真院后端小课堂,每篇分享文从 【背景介绍】【知识剖析】【常见问题】【解决方案】【编码实战】【扩展思考】【更多讨论】【参考文献】 八个方面深度解析后端知识/技能,本篇分享的是: 【什么是HashMap?什么情况下使用HashMap?】 大家好,我是IT修真院深圳分院第十一期学员,一枚正直纯洁善良的JAVA程序员。 今天给大家分享一下,修真院官网JAVA任务十的一个知识点:什么是...

IT修真院:初学者转行到互联网的聚集地 7636

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

【HashMap】

HashMap简单概括

weixin_52553065的博客 2087

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

HashMap相关面试题(哈希表、HashMap的实现原理、HashMap的put方法的具体流程、HashMap的扩容机制、HashMap的寻址算法)

HashMap相关面试题(哈希表、HashMap的实现原理、HashMap的put方法的具体流程、HashMap的扩容机制、HashMap的寻址算法)

聂可以的博客 2244

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

详解 HashMap扩容机制,HashMap的底层原理以及HashSet在底层原理

利用HashCode方法和equals方法HashCode方法来计算出哈希值,根据哈希值计算机出要元素要存入的位置,然后再调用equals方法比较对象内部的属性值是否一样利用什么机制保证去重?**利用HashCode方法和equals方法HashCode方法来计算出哈希值,根据哈希值计算机出要元素要存入的位置,然后再调用equals方法比较对象内部的属性值是否一样。

Java技术加油站的博客 2108

HashMap详解

本文主要介绍了Java集合框架中HashMap的相关知识,包括源码分析、hash 原理、扩容机制、加载因子、线程不安全等内容。

专注Java和MySQL领域知识分享 1685

HashMap深入讲解

摘要: HashMap是Java中基于哈希表的Map实现类,允许null键值且不保证顺序。其底层采用数组+链表/红黑树结构,默认容量16,负载因子0.75(平衡空间与时间效率)。HashSet实际通过HashMap实现。关键特性包括:key需重写equals()和hashCode(),value需重写equals();当链表长度>8且数组容量≥64时转为红黑树。put操作先计算key的hash值(通过hashCode()高16位异或),再处理哈希冲突。构造方法可自定义初始容量和负载因子。

1356

面试手写HashMap,手撕HashMap

前言: 现在面试时,面试官经常会问到HashMap,简单点就会问下HashMap的一些关键知识点,困难些的可能会当场让你手写一个HashMap,考察下你对HashMap底层原理的了解深度;所以,今天特别手写了一个简单的HashMap,只实现了 put、get、containsKey、keySet 方法的 HashMap,来帮助我们理解HashMap的底层设计原理。 本文...

木子雷的博客 2220

JAVA之HashMap详解

HashMap 基于哈希表的 Map 接口实现,是以 key-value 存储形式存在,即主要用来存放键值对。HashMap 的实现不是同步的,这意味着它不是线程安全的。它的 key、value 都可以为 null,此外,HashMap 中的映射不是有序的。jdk1.8 之前 HashMap 由数组 + 链表组成,数组是 HashMap 的主体,链表则是主要为了解决哈希冲突(两个对象调用的 hashCode 方法计算的哈希值经哈希函数算出来的地址被别的元素占用)而存在的(“拉链法”解决冲突)。

励志成为一名优秀的全能型软件开发工程师。 2328

HashMap 详解

本文深入解析Java中HashMap的核心特性、底层数据结构及哈希冲突处理机制,涵盖自定义类型作为key的处理、手写HashMap实现及Java8后的优化,通过源码分析揭示哈希表扩容与性能优化策略,助你掌握高效数据管理与操作技巧。

m0_73941339的博客 1423

HashMap原理

HashMap是基于哈希表的键值对存储结构,采用数组+链表+红黑树解决哈希冲突。核心通过键的hashCode计算哈希值,使用(n-1)&hash确定数组索引位置。默认容量16,负载因子0.75,超过阈值会扩容2倍。Java8优化了哈希扰动函数,将高16位与低16位异或,使分布更均匀。当链表长度超过8且数组容量≥64时,链表转为红黑树;节点数低于6时转回链表。put方法先检查桶是否为空,为空则直接插入;否则处理冲突,匹配则更新,不匹配则链式存储或树化。

猫狗鼠鱼的储物间 1096

Java HashMap

HashMap 的 key 与 value 类型可以相同也可以不同,可以是字符串(String)类型的 key 和 value,也可以是整型(Integer)的 key 和字符串(String)类型的 value。如果你只想获取 key,可以使用 keySet() 方法,然后可以通过 get(key) 获取对应的 value,如果你只想获取 value,可以使用 values() 方法。对 hashMap 中指定 key 的值进行重新计算,如果不存在这个 key,则添加到 hashMap 中。

2401_88984449的博客 1101

HashMap、创建并遍历HashMap集合、LinkedHashMap

HashMap是基于哈希表的Map实现。键是哈希表结构,可以保证键的唯一性。 HashMap 继承于AbstractMap,实现了Map接口。 HashMap的设计初衷主要是为了解决键值(key-value)对应的关联的,HashMap的优势是可以很快的根据键(key)找到该键对应的值(value)。注意一下,HashMap是一种无序的存储结构。 遍历 1.案例1 键String类型,值S...

元气满满晨 1万+
上一篇: HashMap深度解析(二)
下一篇: 随机字符串
奔跑吧小鸟
博客等级 码龄18年 5粉丝 19原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值