关于hashCode的问题
不管是听视频课程还是看文字教程都不太理解hashCode,没有理解清楚原理
hashCode算出地址然后分别放入数据是如何运作的 具体流程是怎样?希望能说的具体点
每个对象所运算出的hashCode值所指向的是一个地址里面有多个内容还是一块地址每个地址一个内容
正在回答 回答被采纳积分+1
同学你好,同学可以结合上面同学回答的内容来理解下
问:hashCode算出地址然后分别放入数据是如何运作的 具体流程是怎样?
答:hashCode是一种规则,根据某种规则来进行存取,给同学举个例子,同学可以看下是否能理解
比如:我们有一个能存放1000个数这样大的内存中,在其中要存放1000个不一样的数字,用最笨的方法,就是存一个数字,就遍历一遍,看有没有相同得数,当存了900个数字,开始存901个数字的时候,就需要跟前900个数字进行对比,这样就很麻烦,很是消耗时间
如果用hashcode来记录对象的位置,来看一下。hash表中有1、2、3、4、5、6、7、8个位置,存第一个数,hashcode为1,该数就放在hash表中1的位置,存到100个数字,hash表中的这8个位置会有很多数字了,1中可能有20个数字,存101个数字时,他先查hashcode值对应的位置,假设为1,那么就有20个数字和他的hashcode相同,他只需要跟这20个数字相比较(equals),如果没有一个相同,那么就放在1这个位置,这样比较的次数就少了很多
问:每个对象所运算出的hashCode值所指向的是一个地址里面有多个内容还是一块地址每个地址一个内容
答:同学是想问hashCode值所指向的是一个地址里面有多个内容,还是一个地址只有一个内容
如果是,hashCode指向的这个地址中会有多个内容
现阶段同学使用eclipse生成的hashCode方法就可以,如果同学对底层的实现比较感兴趣,可以等我们基础知识比较扎实后再来研究
祝学习愉快~
我是这么理解:
hascode就是一种规则,可以用来区分数据 存放、读取 的规则 (这种规则 java系统有默认的 也可以自定义)
1、例如你现在有一车橙子,橙子分为 大、中、小 3中规格,不同的规则价格不一样。如果你把所有的橙子放在一起,那顾客来买大橙子,就需要从所以的橙子里面去比较,去选出符合他想要的大橙子, 那顾客得把一车橙子都筛选一遍。
2、但是如果你制定一种规则,橙子直径10-15cm的是小橙子,15-20cm的是中橙子,20-25cm的是大橙子,他们用不同的框装着,那顾客来买,只需要到对应的框里面去选就好了,不用从整车里面选。同理,你往框里放橘子的时候,也只需要根据直径 去判断放哪一个框就可以了。这种可以用来唯一标识数据的规则,我认为就是hascode。
3、例如集合中添加元素时 set.add[至于哪些方法会调用hascode 这个要看方法实现的源码],会触发hascode执行某一规则,判断出这个元素符合了什么样的条件, 应该存在哪个位置, 只需要在对应的位置里面找这个元素是否存在,如果不存在就添加,如果存在就去比较更具体的内容[如equals里面的操作,如果比较的结果都相等就不添加了]
- 参与学习 人
- 提交作业 9393 份
- 解答问题 16556 个
综合就业常年第一,编程排行常年霸榜,无需脱产即可学习,北上广深月薪过万 无论你是未就业的学生还是想转行的在职人员,不需要基础,只要你有梦想,想高薪
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星