黑马程序员技术交流社区

标题: set的小问题 [打印本页]

作者: 不破大地    时间: 2013-6-21 12:13
标题: set的小问题
复习到集合,set集合里的元素是不能重复的,但是怎么样才能区分重复与否呢,
用==还是equals()方法呢?为啥?

作者: 王靖远    时间: 2013-6-21 12:27
应该是equals方法。set集合唯一性是靠hashCode()和equals方法保证的。 先比较hashCode值,再用equals方法比较,比如学生类姓名相同就this.name.equals(s.name)如果还需要其他信息相同就&&上其他的信息的equals结果。==比较的是地址值,2个实例的地址值是肯定不相同的, 你怎么比结果都是false。
作者: Super_Class    时间: 2013-6-21 12:29
如果覆盖了hashCode方法和equals方法。

先判断hash值,如果hash值相同,就判断equals方法。如果返回值为false,那么就可以存进去

作者: 姚志远    时间: 2013-6-21 12:38
看看==与equals 的区别就容易知道了
==操作符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存储的数值是否相同
要比较两个基本类型的数据或两个引用变量是否相等,只能用==操作符。
equals方法是用于比较两个独立对象的内容是否相同,字符串的比较基本上都是使用equals方法。
作者: msileandroid    时间: 2013-6-21 12:38
首先你要说是那个set集合;
//引用毕老师总结
Set:无序,不可以重复元素。
        |--HashSet:数据结构是哈希表。线程是非同步的。
                                保证元素唯一性的原理:判断元素的hashCode值是否相同。
                                如果相同,还会继续判断元素的equals方法,是否为true。

        |--TreeSet:可以对Set集合中的元素进行排序。
                                底层数据结构是二叉树。
                                保证元素唯一性的依据:
                                compareTo方法return 0.

TreeSet排序的第一种方式:让元素自身具备比较性。
                                元素需要实现Comparable接口,覆盖compareTo方法。
                                也种方式也成为元素的自然顺序,或者叫做默认顺序。

                                TreeSet的第二种排序方式。
                                当元素自身不具备比较性时,或者具备的比较性不是所需要的。
                                这时就需要让集合自身具备比较性。
                                在集合初始化时,就有了比较方式。
作者: shang1jk    时间: 2013-6-21 12:58
HashSet先用hashCode()方法的返回值比较, 如果相同, 再用equals()比. 两步都通过了, 判定为元素重复.

TreeSet用equals()比一次.




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