jdk8,中的hashmap是通过数组+单向链表+红黑树的数据结构来存储数据的,把key通过哈希函数生成数组的索引,然后把key,value封装到对象中存入索引对应的数组中
注意,
1.哈希函数里面返回的索引值是通过哈希值与上数组的最大索引数得到的,数组的长度必须设置成2的n次方,最大索引数就是全部是1的二进制数,不管哈希值有多大,最终得到的是是0到数组的最大索引数
2.jdk中有自己的hashcode()方法,把不同类型的key转换成int类型的哈希值,如果是long和double类型的key,为了让所有的64位的数都参与哈希值的生成,需要让他自身和他右移32位之后的数进行抑或运算,然后再强转成32位即四个字节的int型,此时会把前32位去掉只留下后32位,最终返回的是高低32位参与抑或运算之后得到的哈希值,这样得到的哈希值会充分利用key所有的部分,所以会减少哈希冲突的产
2021-02-21
最新推荐文章于 2021-04-26 06:10:07 发布