关于hashcode计算时的M的值

来源:14-3 Java中的 hashCode 方法

慕妹2978617

2020-03-28

图片描述老师关于课程中复写hashcode,这里我们无法确定M的值,也就不知道我们要开辟多大空间的数组,那么我们直接计算出来的hash值,如果用HashMap或HashSet去存储,这个hash值在HashMap或HashSet对应的是索引吧,那么计算得到94107933 这么大的Hash值,那么我数据要开多大空间?按照索引存储那岂不是一个数据我们就开辟94107933这么大的空间 其余空间全部浪费?

写回答

2回答

liuyubobobo

2020-03-29

你的数组需要开多大的空间,和 hash 值的计算无关,和你的哈希表可能存储多少元素有关。我的课程的代码中,选用了初始值为 97。这个值问题不大。


当你的哈希表存储的元素越来越多的时候,哈希冲突也就会越来越多,相应的,我们的哈希表会开始扩容。


继续加油!:)

0
0

慕妹2978617

提问者

2020-03-28

我有看了一边想了一下,这个我们复写自定义的hash值是只有在HashMap或HashSet这种需要计算hash值得数据结构中才用得到,那么我们自己复写自定义得hashCode函数返回得hash值,在这两个集合中会同过这个值利用自己类中得方法再去计算他们应该存什么位置,所这里我们只是需要给出一个hash值就好,具体的M的确定,存在HashMap或HashSet什么位置,hash冲突都是由HashMap或HashSet这两个集合去处理的,对吗?谢谢老师

0
0

玩转数据结构

动态数组/栈/队列/链表/BST/堆/线段树/Trie/并查集/AVL/红黑树…

6221 学习 · 1704 问题

查看课程