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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© lyssenlove 中级黑马   /  2014-7-9 23:04  /  1447 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

hashCode是Object的一个方法,在对象实例下它的原理是怎样的,在set集合中,它的作用又是如何体现的

2 个回复

倒序浏览
先说说什么是哈希表吧:
      哈希表底层使用的也是数组机制,数组中也存放对象,而这些对象往数组中存放时的位置比较特殊,当需要把这些对象给数组中存放时,那么会根据这些对象的特有数据结合相应的算法,算出这个对象在数组中的位置,然后把这个对象存放在数组中。而这样的数组就称为哈希数组,即就是哈希表。
      当给哈希表中存放元素时,需要根据元素的特有数据结合相应的算法,这个算法其实就是Object中的hashCode方法。由于任何对象都是Object类的子类,所以任何对象有拥有这个方法。即就是在给哈希表中存放对象时,会调用对象的hashCode方法,算出对象在表中的存放位置,这里需要注意,如果两个对象hashCode方法算出结果一样,这样现象称为哈希冲突,这时会调用对象的equals方法,比较这两个对象是不是同一个对象,如果equals方法返回的是true,那么就不会把第二个对象存放在哈希表中,如果返回的是false,就会把这个值存放在哈希表中。
总结:保证元素的唯一,其实就是根据对象的hashCode和equals方法来决定的。如果我们往集合中存放自定义的对象,那么保证其唯一,就必须复写hashCode和equals方法建立属于当前对象的比较方式。
回复 使用道具 举报
HashSet集合的底层数据结构是哈希表
哈希表保证元素的唯一性:依赖两个方法:hashCode()和equals()。
顺序:首先判断对象的hashCode()在哈希表中是否存在相同哈希值;
          是:继续走equals(),依次与同一哈希值下的各元素比较是否相同,看其返回值;
                     返回true:说明元素重复了,不添加。
                     返回false:就直接添加到集合。
         否:直接添加到集合中。
当我们用HashSet存储自定义对象时,需要重写hashCode()和equals()方法
另外HashSet集合contains()以及remove()方法也是依赖于hashCode()和equals()方法。
当我们用HashSet存储自定义对象时,需要重写hashCode()和equals()
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马