黑马程序员技术交流社区

标题: HashSet [打印本页]

作者: lindegen    时间: 2014-6-21 21:51
标题: HashSet
学到Set无序集合,HashSet保证元素的唯一为什么要先比较hashCode的返回值然后再比较equals呢? 这样有好处吗
作者: lindegen    时间: 2014-6-21 22:18
百度了一下,结果是这样的:因为我们要比较的是对象里面的内容,而默认2个对象返回的哈希码值肯定是不一样的,哈希表首先回去判断2个对象的哈希码值,如果知道是不一样的,那么它就认为这2个对象时不一样的,但是如果内容是一样的呢,所以,我们要重写hashCode 把他们整一样了才有机会去比较内容,同理,比较完了hashCode ,Object.equals比较的是对象的地址值,同样默认是不一样的,所以又得重写它,里面就写了你要比较的内容。
作者: lindegen    时间: 2014-6-21 22:19
也就是说,必须重写这2个方法才能保证存入的对象的内容是不一样的
作者: Up↑Lee↗    时间: 2014-6-21 22:40
因为这个样子比较高效,HashSet存放元素的时候,先看地址,吧、只要地址不一样,即使元素内容相同也判断属于是不同的元素。
作者: java木    时间: 2014-6-21 22:40
根据java核心技术上讲,有时候我们要在一堆数据中查一个元素,象List集合可以根据索引快速查出。但如果忘记索引,那就要遍历整个集合才能想寻找。Set集合之所以根据HashCode(  )存储元素、因为集合内部有一套算法,可以快速根据哈希值查找元素。该算法是用要查找的元素的哈希值除集合总数,余数就为该元素的索引。所以先比较hasHcode(),再根据equals();




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2