java集合-HashMap
HashMap
HashMap 是一个散列表,它存储的内容是键值对(key-value)映射。
该类实现了 Map 接口,根据键的 HashCode 值存储数据,具有很快的访问速度,最多允许一条记录的键为 null,不支持线程同步。
散列表(Hash table,也叫哈希表)
是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。
这个映射函数叫做散列函数,存放记录的数组叫做散列表。
HashMap实现原理
HashMap 主要是以数组和链表实现的,每个列表被称为桶。要想査找表中对象的位置, 就要先计算它的散列码, 然后与桶的总数取余, 所得到的结果就是保存这个元素的桶的索引。
解释:hashmap 是以一个数组和链表储存的。那么现在加入数组有 10 个长度,比方说现在需要 add 的一个key=1,vallue=“张三”的元素
散列表数组的下标=1.hashcode()%散列表数组.length,这个就是数组的下标。
将 key,value 存进索引下的链表中,当然,有时候会遇到桶被占满的情况, 这也是不可避免的。
这种现象被称为散列冲突( hashcollision) o 这时, 需要用新对象与桶中的所有对象进行比较,査看这个对象是否已经存在。
如果散列码是合理且随机分布的, 桶的数目也足够大, 需要比较的次数就会很少。
构造方法
HashMap()
构造一个具有默认初始容量 (16) 和默认加载因子 (0.75) 的空 HashMap。
HashMap(int initialCapacity)
构造一个带指定初始容量和默认加载因子 (0.75) 的空 HashMap。
HashMap(Map<? extends K,? extends V> m)
构造一个映射关系与指定 Map 相同的新 HashMap。
HashMap常用方法
size()
返回此映射中的键-值映射关系数。
put(K key, V value)
在此映射中关联指定值与指定键。
putAll(Map<? extends K,? extends V> m)
将指定映射的所有映射关系复制到此映射中,这些映射关系将替换此映射目前针对指定映射中所有键的所有映射关系(即如果存在相同键,则替换该键值;否则做添加操作)。
get(Object key)
返回指定键所映射的值;如果对于该键来说,此映射不包含任何映射关系,则返回 null。
remove(Object key)
从此映射中移除指定键的映射关系(如果存在)。
isEmpty()
如果此映射不包含键-值映射关系,则返回 true。
keySet()
返回此映射中所包含的键的 Set 视图。
containsKey(Object key)
如果此映射包含对于指定键的映射关系,则返回 true。
containsValue(Object value)
如果此映射将一个或多个键映射到指定值,则返回 true。
values()
返回此映射所包含的值的 Collection 视图。
entrySet()
返回此映射所包含的映射关系的 Set 视图。
clear()
从此映射中移除所有映射关系。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)