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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 不破大地 中级黑马   /  2013-6-21 12:13  /  1277 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

复习到集合,set集合里的元素是不能重复的,但是怎么样才能区分重复与否呢,
用==还是equals()方法呢?为啥?

5 个回复

倒序浏览
应该是equals方法。set集合唯一性是靠hashCode()和equals方法保证的。 先比较hashCode值,再用equals方法比较,比如学生类姓名相同就this.name.equals(s.name)如果还需要其他信息相同就&&上其他的信息的equals结果。==比较的是地址值,2个实例的地址值是肯定不相同的, 你怎么比结果都是false。
回复 使用道具 举报
如果覆盖了hashCode方法和equals方法。

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

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

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

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

TreeSet用equals()比一次.
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马