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.

おすすめ

転載: blog.csdn.net/kkkyzp/article/details/121306736