黑马程序员技术交流社区
标题:
谁能帮我解释一下这句话...
[打印本页]
作者:
刘涛
时间:
2011-11-25 09:59
标题:
谁能帮我解释一下这句话...
本帖最后由 刘涛 于 2011-11-28 18:14 编辑
张老师说的 , hashcode把集合分成若干个区域,一般情况下arraylist中不用hashcode,hashcode一般只应用在hash集合中,才有价值。
不懂 ,求解 .
作者:
侯伟浩
时间:
2011-11-25 10:07
hashcode的作用就是为了比较两个对象是否相等。而hash集合都有消除重复的功能,其去重的功能就是依靠了hashcode。
个人理解:hash集合会判断两个元素的hashcode是否相同,相同的话就去掉一个,不相同就会使用equals()方法比较。
所以只有有消除重复功能的集合(hash集合)才会用得着hashcode,而ArrayList没有这个功能,就用不上hashcode。
所以说hashcode一般只应用在hash集合中,才有价值。
作者:
强子
时间:
2011-11-25 10:35
hash集合 会根据hashcode划分存储区域 利用了哈希算法 而arraylist没有使用哈希算法
比如说如果一个对象的hashcode是1 那么它只能存储在1这个区域内
所以在hash集合中查找一个元素 通过判断他的hashcode之后去特定的区域查找该元素 而不用查找整个集合 这样效率就更高了
作者:
刘元霄
时间:
2011-11-25 20:05
学得太慢 感觉你们问得问题我都不会 着可怎么办{:soso_e109:}
作者:
wanghongye
时间:
2011-11-26 20:13
当向集合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);来得到。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2