HashMap中key的存放原理:
1.创建Set集合 HashSet 其容器数组默认大小为16 也就是将容器分为16个区域,每一个区域存放的是链表.
2.现有一个元素想存放到set集合中,第一步要确定要放在哪个区域里面.方法是先取元素的hashcode,将这个值与1111进行与运算
所得到的值一定是0~15之间的数,这个数字决定了该元素会存放在set集合中的哪个区域里面.
3.已经决定了存放在那个区域,就检查这个区域的使用情况,如果该区域没有任何元素,就将新元素直接放置在这个区域中.
4.如果该区域里面有元素,就要判断要加入的元素与区域中每个元素是否有相同的,遍历该区域的链表 先通过hashcode比较 再通过 equals方法比较
元素放到的区域值是如何计算的:
1.获得元素的哈希码,是一个32位的整数 将其无符号右移16位 使其高位变低位 再与原先低位的值进行亦或运算(对应位相同为0不同为1)
2.将上一步得到的值与二进制15进行与操作 得到0~15之间的值
HASH(散列)的意义
hash的意义是将对象的存放位置在内存中打散,又不损失检索的速度.
转载于:https://blog.51cto.com/pwitachi/1770103