黑马程序员技术交流社区

标题: Set里面的元素师不能重复的,那么他是用什么方法来区分的 [打印本页]

作者: 单曲循环    时间: 2014-8-12 13:16
标题: Set里面的元素师不能重复的,那么他是用什么方法来区分的
用什么方法来区分的,有什么区别?

作者: 闪电博尔特    时间: 2014-8-12 13:31
哈希表不一样啊,还有equals()方法比较
作者: 逍遥客    时间: 2014-8-12 13:34
在对象中重写hashCode和equals方法,,也可以自定义比较方法
作者: zhouqun    时间: 2014-8-12 21:25
哈希表类的存入的元素类需要重写hashcode和equals方法  二叉树类实现comparable和comparator接口 建立比较方式
作者: idency    时间: 2014-8-12 21:34
1:哈希set 是通过先比较存入对象的哈希值,如果哈希值一样的话再比较equals方法!如果还一样就不会存入!2:而TreeSet是通过你实现comparable接口后,重写其中的compareTo方法进行比较或者是在穿件TreeSet对象时传入一个Comparator对象,通过Comparator的compareTo方法进行比较是否重复

作者: liubea    时间: 2014-8-12 23:58
是用equals方法和hashcode方法结合使用来区分
作者: jackhai9    时间: 2014-8-13 07:42
HashSet和TreeSet不一样的实现方法,楼上有人说了。
作者: dftgg    时间: 2014-8-13 10:01
hashCode和equals方法
作者: 臭豆腐_w    时间: 2014-8-13 13:39
    HashSet是通过元素的hashCode和equals来实现的,比如,在使用contains或add方法时,都要首先调用hashCode方法获取你要判断或加入的元素的哈希值,与容器里的元素进行比较,如果哈希值不相同,则与下一个比较,如果相同,则调用equals方法再进行比较,如果比较结果相同,contains会得到一个返回值true,add也会得到一个布尔型的值false并且结束此次调用,如果比较结果不同,会继续与下一个元素进行比较;当比较到最后,都没有相同的元素时,contains方法会得到一个返回值false并结束调用,而add会得到一个返回值true和会修改该Set集合(即把这个元素添加到集合中)并结束此次调用。
    remove方法也是按这种方式比较的,但不管是哪种方法按这种方式去比较,对于hashCode和equals的调用都是由Java底层去实现的,而我们只需要重写hashCode和equals方法就行,特别是对于集合元素是自定义对象时,则必须要按对象内容重写这两个方法,否则就比较不出来了(因为每新建一个对象,都会有新的地址分配给对象)。




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