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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

是用==还是equals()? 它们有何区别?   

评分

参与人数 1黑马币 +3 收起 理由
乔兵 + 3

查看全部评分

4 个回复

倒序浏览
Set是Collection容器的一个子接口,它不允许出现重复元素,当然也只允许有一个null对象。
使用equals()区分更合适。==是用来判断两者是否是同一对象(同一事物),而equals是用来判断是否引用同一个对象。再看一下Set里面存的是对象,还是对象的引用。根据java的存储机制可知,set里面存放的是对象的引用,所以当两个元素只要满足了equals()时就已经指向同一个对象,也就出现了重复元素。所以应该用equals()来判断。

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
HashSet是先用HashCode,相同就equals比较
TreeSet应该是根据元素自身的比较性
回复 使用道具 举报
不能单一的说Set是怎样实现它自身的元素唯一性的,还要看他子类的底层数据结构.
HashSet的底层是哈希表,保持证元素的唯一性的依据是:它是通过元素的两个方法hashCode()和equals来完成的,如果hashCode值相同,才会判断equals 是否相同。反之不会判断equals
TreeSet底层是二叉树,保证元素唯一性的依据:用compareto这个方法来验证来验证两个元素是否相同,返回值为零表示两数相同,不存,返回正数,表示新来的元素大于已有的元素,返回负数,表示小于已有的元素。

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报 1 0
  1. public class Test {
  2.         public static void main(String[] args) {
  3.                 Set<String> set = new HashSet();
  4.                 set.add("a");
  5.                 set.add("a");
  6.                 set.add("b");
  7.                 set.add("c");
  8.                 for(String str : set){
  9.                         System.out.println(str);
  10.                         //打印结果为:b        c a 证明第二个“a"没能存进去
  11.                 }
  12.         }
  13. }
复制代码

所以肯定不是“==”,如果是“==”那么“a" == "a"肯定会得到两者不同,二个“a"会存进去。
具体是什么情况参照楼上。

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马