HashMap 是一个散列表,它存储的内容是键值对(key-value)映射,HashMap继承于AbstractMap,实现了Map、Cloneable、java.io.Serializable接口,HashMap的实现不是同步的,这意味着它不是线程安全的,它的key、value都可以为null。此外HashMap中的映射不是有序的。
基于哈希表的 Map接口的实现。此实现提供所有可选的映射操作,并允许使用 null 值和 null 键。此类不保证映射的顺序,特别是它不保证该顺序恒久不变。 此实现假定哈希函数将元素适当地分布在各桶之间,可为基本操作(get 和 put)提供稳定的性能。迭代 collection视图所需的时间与 HashMap 实例的“容量”(桶的数量)及其大小(键-值映射关系数)成比例。所以,如果迭代性能很重要,则不要将初始容量设置得太高(或将加载因子设置得太低)。
HashMap 的实例有两个参数影响其性能:初始容量 和加载因子。容量是哈希表中桶的数量,初始容量只是哈希表在创建时的容量。加载因子 是哈希表在其容量自动增加之前可以达到多满的一种尺度。当哈希表中的条目数超出了加载因子与当前容量的乘积时,则要对该哈希表进行 rehash 操作(即重建内部数据结构),从而哈希表将具有大约两倍的桶数。在Java编程语言中,加载因子默认值为0.75,默认哈希表元为101。
在Java的世界里,无论类还是各种数据,其结构的处理是整个程序的逻辑以及性能的关键。而HashMap无疑是JDK的一大实用工具,把各个Object映射起来,实现了“键--值”对应的快速存取。作为Java开发人员,HashMap底层原理更是面试必问的内容。本站的数位名师精心录制了《HashMap源码分析》课程,为大家深入揭开HashMap底层原理,让我们学有所得。
1-1 HashMap的基本操作 (15:42)
1-2 哈希表的数据结构 (21:26)
1-3 HashMap的put工作原理 (11:59)
1-4 HashMap的get工作原理 (05:13)
1-5 JDK8中HashMap的改进 (06:27)
1-6 哈希表中的红黑树 (07:29)
1-7 HashMap中的哈希碰撞 (06:25)
1-8 第一次put添加键值对时给数组初始化 (14:13)
1-9 put添加键值对源码分析 (15:20)
1-10 get方法的源码分析 (10:09)
1-11 HashMap初始化容量会调整为2的幂次方 (14:00)
1-12 HashMap的应用统计字符出现的次数 (09:27)
据不完全统计,HashMap是Java程序员使用频率最高的用于映射(键值对)处理的数据类型。随着JDK(Java Developmet Kit)版本的更新,JDK1.8对HashMap底层的实现进行了优化,例如引入红黑树的数据结构和扩容的优化等。HashMap的结构实现和功能原理都成为了Java中的关键知识,倘若不能掌握我们将在Java开发中寸步难行,让我们借助HashMap源码分析视频教程来完成我们华丽的蜕变吧!
代码小兵49806-11 15:28
代码小兵49806-11 15:51
代码小兵49806-11 16:22
代码小兵51603-29 17:28
暴风城-小飞04-06 20:49