Set接口如何判断加入对象是否已存在?

Set接口在对象往里加之前做了个判断。采用的是对象的equals方法去比较一下,如果发现两个对象是相等的,他就认为对象已经存在,为了保证Set接口的唯一性,即使你再加多次,set.size()还是只算1个长度,

首先是栈中变量s1在堆中创建了一个新的字符串对象”java“,

 s2=s1,s3又在堆里new了一个新对象”java“

 代码如下:

public class SetTest2 {
    public static void main(String[] args) {
        Set set=new HashSet();
        String s1=new String("java");
        String s2=s1;
        String s3=new String("java");
        set.add(s1);
        set.add(s2);
        set.add(s3);
        System.out.println(set.size());
    }
}

运行结果:size为1

 

原因:

string字符串类对从object类里继承过来的equals方法进行了重写,已经比较过string类里面的内容是否相等,虽然s1,s2和s3是不同的引用,但由于string字符串类特殊性,他们内容是一样的,所以s1,s2和s3equals()以后,他们的结果是true,所以机器认为就是同一个对象,所以size不会增加,依旧是1.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值