哈希表(HashTable)结构简单分析

哈希表
散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。
给定表M,存在函数f(key),对任意给定的关键字值key,代入函数后若能得到包含该关键字的记录在表中的地址,则称表M为哈希(Hash)表,函数f(key)为哈希(Hash) 函数。

在说哈希表前,我们简单的说下数组,在我们通常所认识的数组可能是下图这样的
哈希表(HashTable)结构简单分析
但是真实的数组其实是这样的
哈希表(HashTable)结构简单分析
在一般的数组中,元素在数组中的索引位置是随机的,元素的取值和元素的位置之间不存在确定的关系,因此,在数组中查找特定的值时,需要把查找值和一系列的元素进行比较.
所以当我们你在取值比如:arr[0]时底层会有一个查找的问题
当我们想如果数组真的和我们想象中的一一对应的话,就出现了哈希表,所以说哈希表可以当成一个特殊的数组,就是数组的索引和它的值有一一对应的关系
公式为: index = hash(value);
一般情况下,我们是不会把哈希码(hashCode)作为元素在数组中的索引位置的,因为哈希码很大,数组长度有限,会造成索引越界问题.所以hash表的映射其实是
元素值 ----hash(value)----> 哈希码-----某种映射关系------> 元素存储索引
哈希表(HashTable)结构简单分析
所以哈希表的插入和查找性能是比较高的,
那么哈希表的扩容是什么样的呢,我们都知道数组的扩容是到达了存储的最大容量发现无法存储后然后就开始扩容,
可是哈希表的扩容不是这样计算的,哈希表底层默认容量为16,并且当你的存储数据占到了容量的百分之七十五(java底层默认0.75)时就开始准备扩容了,扩容会导致性能降低,所以当哈希表快要装满的时候,性能会比较低,但是在平时哈希表的想能都是很高的

若有差错,还望指正,共勉