黑马程序员技术交流社区
标题:
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