详解HashMap数据结构实现
HashMap的设计是由数组加链表的符合数据结构,在这里用自己的语言以及结合源码去总结一下,如果有不对的地方希望评论指正,先拱手谢谢。
HashMap是日常中非常常用的一种数据结构,我们要想深入了解学习任何一门技术,都是要先应用,再深入。深入就要了解实现的原理,在java语言中,最基本的结构是数组以及类变量(引用),HashMap是两者的结合,更明确的说,HashMap是数组以及链表的结合。
public class HashMap<K, V>extends AbstractMap<K, V>implements Map<K, V>, Cloneable, Serializable {private static final long serialVersionUID = 362498820763181265L;static final int DEFAULT_INITIAL_CAPACITY = 16;static final int MAXIMUM_CAPACITY = 1073741824;static final float DEFAULT_LOAD_FACTOR = 0.75F;static final int TREEIFY_THRESHOLD = 8;static final int UNTREEIFY_THRESHOLD = 6;static final int MIN_TREEIFY_CAPACITY = 64;transient Node<K, V>[] table;transient Set<Map.Entry<K, V>> entrySet;transient int size;transient int modCount;int threshold;final float loadFactor; ... }
我们可以看到HashMap维护了一个Node<K,V>数组,在这里我们再看Node的实现
static class Node<K, V>implements Map.Entry<K, V>{final int hash;final K key;V value;Node<K, V> next; ..... }
Node维护了四个属性,Key,Value,Hash码,以及关键的:Node<K,V> next,每一个Node持有下一个Node,形成了链表。
在这里奉上一张HashMap的导图,当我们插入一个值时,即插入了一个Node,通过Node的key的hashcode与Node<K,V> table 数组的长度来计算出这个Node在数组中的位置,也就是下标。计算的方法就是hash算法,当我们插入一个Node的时候,Key是唯一的,但是不同的key求出的hashcode
转载于:https://www.cnblogs.com/beforedawn/p/6850038.html
详解HashMap数据结构实现相关推荐
- 【算法详解】数据结构:7种哈希散列算法,你知道几个?
一.前言 哈希表的历史 哈希散列的想法在不同的地方独立出现.1953 年 1 月,汉斯·彼得·卢恩 ( Hans Peter Luhn ) 编写了一份IBM内部备忘录,其中使用了散列和链接.开放寻址后 ...
- 【线索二叉树详解】数据结构06(java实现)
线索二叉树 1. 线索二叉树简介 定义: 在二叉树的结点上加上线索的二叉树称为线索二叉树. 二叉树的线索化: 对二叉树以某种遍历方式(如先序.中序.后序或层次等)进行遍历,使其变为线索二叉树的过程称为 ...
- 详解HashMap的内部工作原理
本文将用一个简单的例子来解释下HashMap内部的工作原理.首先我们从一个例子开始,而不仅仅是从理论上,这样,有助于更好地理解,然后,我们来看下get和put到底是怎样工作的. 我们来看个非常简单的例 ...
- Java基础:详解HashMap在多线程下不安全
今天想知道HashMap为什么在多线程下不安全,找了许多资料,终于理解了. 首先先了解一下HashMap: HashMap实现的原理是:数组+链表 HashMap的size大于等于(容量*加载因子)的 ...
- 详解HashMap的put方法
关于HashMap,在面试中几乎是必问的考点,记得我第一次面试,面试官上来就是说一下HashMap的put方法.不过当时还好做好了准备,这些也是能够轻松回答出来.值得注意的是,从JDK1.7到JDK1 ...
- 详解高级数据结构之 跳表
目录 一.跳表的介绍 二.跳表的数据结构图 三.跳表的查找 四.跳表是不是很浪费内存? 五.跳表高效的动态插入和删除 跳表索引动态更新 六.跳表的特性 七.小结 八.C++实现简易跳表 一.跳表的介绍 ...
- 有序数组二分查找java_详解Java数据结构和算法(有序数组和二分查找)
一.概述 有序数组中常常用到二分查找,能提高查找的速度.今天,我们用顺序查找和二分查找实现数组的增删改查. 二.有序数组的优缺点 优点:查找速度比无序数组快多了 缺点:插入时要按排序方式把后面的数据进 ...
- 直接插入排序、冒泡排序实验详解【数据结构实验报告】
文章目录 一.直接插入排序 二.冒泡排序 一.直接插入排序 1.算法思想 直接插入排序(straight insertion sort),有时也简称为插入排序,是减治法的一种典型应用.其基本思想如下: ...
- 详解+G - 数据结构实验之栈与队列七:出栈序列判定
理解: 出入栈规律之一,如果前面有一个比较大的数,后面有连续的递增顺序,递增顺序>=2个小于前面比较大的数,那么此出栈顺序不可能实现.比如4,1,2,3,5. 思路:输入一个数,然后不断按照顺序 ...
最新文章
- [LeetCode] Restore IP Addresses 复原IP地址
- [导入]日志 20071211(WCF,实验室产品)
- k8s 更改pod数量限制(默认每个节点最多110组pod)0/3 nodes are available: 3 Insufficient cpu报错排查
- Linux centosVMware zip压缩工具、tar打包、打包并压缩
- ruby 数据sql操作
- android 网络连接 网络是否可用,Android 使用ping判断网络/WIFI连接是否可用
- oracle select之后自动保存excel_Excel制作自动化仓库入库单,数据录入、计算、保存只需一键完成...
- maven eclipse操作
- 【毕业设计】PHP公共课平时成绩查询系统(源代码+论文+答辩PPT)
- latex 箭头_Pandoc上手以及如何使得latex文件转换为Docx文件(MAC)
- Uber开源深度学习工具Ludwig学习实践
- 显示“没有注册类”问题解决方法(mscomm)
- cs229吴恩达机器学习课件
- Oracle函数HEXTORAW乱码,Oracle常用函数之HEXTORAW
- Python进行Excel数据处理
- python枚举详解
- VirtualBox 磁盘扩容(亲测有效)
- 《运营力——微信公众号 设计 策划 客服 管理 一册通》导读
- ITILv4 MP认证以及证书展示
- pytorch自定义forward和backward函数
热门文章
- 5.深度学习练习:Deep Neural Network for Image Classification: Application
- 华为服务器怎么查看系统日志,华为日志服务器
- 数组填充php,php数组入门教程之数组填充
- Eclipse中使用Checkstyle,checkstyle插件检查java代码的自定义配置文件:
- java pdf stamper_PDFStamper在几个PDF文件上失败(itext 5.5.1)
- leecode11 盛水最多的容器
- 【大总结1】数据结构与传统算法总结
- 《Java8实战》笔记(01):为什么要关心Java8
- linux版车机安装步骤,RedHat Linux 9.0的安装(详细图解安装过程)
- C++primer 第 3 章 字符串、向量和数组 3 . 4 迭代器介绍