A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘涛 黑马帝   /  2011-11-25 09:59  /  1678 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 刘涛 于 2011-11-28 18:14 编辑

张老师说的 , hashcode把集合分成若干个区域,一般情况下arraylist中不用hashcode,hashcode一般只应用在hash集合中,才有价值。
不懂 ,求解 .

4 个回复

倒序浏览
hashcode的作用就是为了比较两个对象是否相等。而hash集合都有消除重复的功能,其去重的功能就是依靠了hashcode。
个人理解:hash集合会判断两个元素的hashcode是否相同,相同的话就去掉一个,不相同就会使用equals()方法比较。
所以只有有消除重复功能的集合(hash集合)才会用得着hashcode,而ArrayList没有这个功能,就用不上hashcode。
所以说hashcode一般只应用在hash集合中,才有价值。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
强子 黑马帝 2011-11-25 10:35:48
藤椅
hash集合 会根据hashcode划分存储区域 利用了哈希算法 而arraylist没有使用哈希算法
比如说如果一个对象的hashcode是1 那么它只能存储在1这个区域内
所以在hash集合中查找一个元素 通过判断他的hashcode之后去特定的区域查找该元素 而不用查找整个集合  这样效率就更高了

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
学得太慢  感觉你们问得问题我都不会 着可怎么办{:soso_e109:}

评分

参与人数 1技术分 +1 收起 理由
admin + 1 加油! 继续努力

查看全部评分

回复 使用道具 举报
当向集合Set中增加对象时,首先集合计算要增加对象的hashCode码,根据该值来得到一个位置用来存放当前对象,挡在该位置没有一个对象存在的话,那么集合Set认为该对象在集合中不存在,直接增加进去。如果在该位置有一个对象存在的话,接着将准备增加到集合中的对象与该位置上的对象进行equals方法比较,如果该equals方法返回false,那么集合认为集合中不存在该对象,在进行一次散列,将该对象放到散列后计算出的新地址里,如果equals方法返回true,那么集合认为集合中已经存在该对象了,不会再将该对象增加到集合中了。
    2、重写equals方法的时候必须重写hashCode方法。如果一个类的两个对象,使用equals方法比较时,结果为true,那么该两个对象具有相同的hashCode。原因是equals方法为true,表明是同一个对象,它们的hashCode当然相同。
    3、Ojbect类的hashCode方法返回的是Object对象的内存地址。可以通过Integer.toHexString(new Object().hashCode);来得到。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马