什么是hash
比较官方的解释是将任意长度数据映射到到固定长度的域中。
例如我们要将1~100编号的苹果放在10个篮子中,怎么做才能尽可能均匀地分散这100个苹果,使得每个篮子苹果个数大致相当。最简单的办法就是通过模运算来解决,把每一个苹果的编号num
对篮子数n
进行取模得到该苹果要放入篮子的编号index
,即index=num%n
。这样,可以保证每个篮子都将放入10个苹果。
hash在Map中的应用
HashMap
的底层是HashTable
,通过Node[]
进行数据存储;每一个Node
是一个key-value
键值对,在进行Node
存放,即确定节点在Node[]
中的存储index
时,采用了Hash
散列的思想。由于Hash
散列的随机性,有时候会出现不同Node
同一index
的情况,这时候HashMap
采用了同一index
处采用链表的形式来存储相同index
的不同Node
。
HashMap所在包
HashMap
位于java.util
包下,使用它必须导包。
HashMap构造函数
HashMap
有4个构造函数,源码如下:
1 | /** |
一般情况下,我们默认使用空参构造函数,只有在特殊情况需要调节HashMap
性能时会使用包含initialCapacity
或loadFactor
含参构造函数。