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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 咸明月 初级黑马   /  2012-7-14 11:14  /  1554 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

hashCode方法对于HashSet的作用是什么

6 个回复

正序浏览
hashCode是hashSet集合用来判断两个元素是否为同一个元素的方法,如果hashCode值相同,再次使用equals来判断元素是否相同,所以一般对象,如果想用hashSet来存储元素,一般需要复写hashCode和equals方法,简单来说,hashCode是hashSet保证元素的唯一性的方法之一。
回复 使用道具 举报
   表面上看来,HashSet集合里面的元素都是没有索引的,实际上当程序向HashSet集合中添加元素的时候,HashSet集合会根据这个元素的HashCode值来决定他的存储位置--这个就是说,每个元素的hashCode就是他的"索引";
为什么不直接使用数组呢,还需要使用HashSet呢?,因为数组元素的索引是连续的 ,而且数组的长度是固定的,无法自由增加数组的长度,而且HashSet就不一样了,HashSet来根据每个元素HashCode作为索引,从而自由增加了HashSet的长度,并可以根据元素的HashCode值来访问元素,所以,从HashSet中访问元素的时候,HashSet先计算元素的HashCode值(也就是调用这个对象的HashCode()方法的返回值),安徽直接到这个HashCode对于的位置去取出这个元素---这就是HashSet集合速度很快的原因
回复 使用道具 举报
hashCode指明了hashSet集合中的数据的唯一性,采用的hash表存储方式。在使用判断两个数据是否相同时,先判断hashCode是否相同,如果相同再判断equals是否相同。
回复 使用道具 举报
HashSet的底层数据结构是哈希表,HashSet通过元素的hashCode和equals来保证元素的唯一性,如果元素的hashCode值相同,会再判断equals是否为true,如果元素的hashCode值不同,则不用调用equals方法
回复 使用道具 举报
在存放集合这种数据的时候,我们可以选择List和Set两种形式,当然,Java当中它们不是具体的实现类.我们可以使用具体的实现类进行数据的存储.
但是List和Set的最显著区别,应该是,List可以放置相同的元素,Set只能放置不同的元素.也就是说Set里面的元素具有唯一性.

当然ArrayList和LinkedList也只是具体的实现形式不同了.我们也可以实现一个ArraySet或LinkedSet.但是.我们会发现一个比较严重的问题.就是.当我们向ArraySet(或LinkedSet)里面添加元素的时候,我们要逐个比较里面的所有已有元素.这样,当集合中数量非常多的时候,比较次数也会直线上升

为了更快捷的检索数据,我们才引进了hashCode的概念,每个Set里面的元素都会有一个hashCode的值,我们可以按照hashCode的值来存储集合里面的元素.如果要检索集合里面是否存在要添加的元素,只要先将该元素的hashCode值算出来,再到相应的位置进行查找,就可以了.对于相同hashCode的不同元素,我们把这个位置,按照链表的形式进行存放.这样,就可以很大程度上减少比较的次数.

点评

兄弟啊,JAVA里面没有ArraySet和LinkedSet。。。。  发表于 2012-7-14 13:47
回复 使用道具 举报
因为set集合中,每个对象都必须是不一样的,因此必须要保证对象的唯一性。所以每个对象的hashcode必须不一样,HashCode()方法就是要生成不一样的hashcode,进行散列,方便查找,比较。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马