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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 韩军博 于 2011-12-9 12:36 编辑

希望各位详细的解释在内存中系统是怎样使用哈希算法和hashcode将元素存储在HashSet中的

评分

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

查看全部评分

4 个回复

倒序浏览
在内存中怎样使用哈希算法和HashCode?这问题太底层了,我其实也不十分清楚,但我是这样想的:先想想哈希(散列)算法的特点(值决定位置),然后内存中有一块空间是属于HashSet开辟的,把这块空间想像成一个坛子,然后这个里要存储东西了,但是坛子里是不能存储相同东西的。在往坛子里加东西的时候,先看看坛子里面有没有相同的东西,什么叫相同呢?这就要用到一个判断标准,及每个东西都有一个hashCode值,用HashCode()方法获取。我们不仅可以通过HashCode值来判断坛子里时候已经有了相同东西,而且如果在没有相同东西的前提下我们可以用HashCode值来决定该对象放在HashSet(坛子)中的存储位置!
回复 使用道具 举报
1,哈希算法:这种算法将集合分为若干个区域,每个对象可以计算出一个哈希码,可以讲哈希码分组,每组分别对应一个区域,根据一个对象的哈希码就可以确定这个对象存储在那个区域,从而大大提高了存储和读取兑取集合中对象的速度;
        2,哈希集合:就是内部采用了哈希算法的集合,HashSet就是一种哈希集合。
        3,只有类的实力对象要被采用哈希算法进行检索与存储时菜要求覆盖HashCode方法。当然提供一个hashcode方法机师对象不用到也不会有什么坏处;
        4,注意:①一般来说两个对象equal方法相等时他们的哈希码必须相等,但反之则不一定;
                ②当一个对象被存储进哈希集合钟以后就不能修改这个对象中参与了哈希码计算的字段了,否则修改后的哈希值跟存储时的哈希值就不一样了,那么当以后需要检索这个对象时根据新的哈希码就检索不到此对象,而想要移除这个对象时也会无法删除这个对象,从而造成内存泄露;

这都是张老师的视频里讲过的东西,上面是我做的笔记,你只要去看看视频就会知道了

评分

参与人数 1技术分 +1 收起 理由
王德云 + 1

查看全部评分

回复 使用道具 举报
hash算法是把内存地址转换为唯一的hash码,因为内存地址唯一,所以hash码也是唯一的,保证集合中的元素不重复。
hashSet是一种集合,底层的数据结构采用hash算法,集合元素无序并且唯一。
回复 使用道具 举报
底层的不太清楚,但你只要记住:hash算法为每个hashset提供一个hashcode值,作为在内存中的hashset中的每个元素的唯一的不可重复的标志。这样就ok了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马