Collection的contains和remove方法注意点

  • 存储到集合的元素一定要重写equals方法,否则contains比较的是内存地址是否一致
public class CollectionTest3 {
    public static void main(String[] args) {
        Collection c = new ArrayList();
        String s1 = new String("abc");
        String s2 = new String("abc");
        c.add(s1);
        boolean contains = c.contains(s2);
        //虽然集合c里确实不包含s2元素
        //但是contains底层调用了equals方法,而s2是String类型,它的equals方法比较的是内容是否一致
        System.out.println(contains);//true
        //同理,remove方法底层也调用了equals方法
        c.remove(s2);
        System.out.println(c.size());//0

        User u1 = new User("jqc");
        User u2 = new User("jqc");
        c.add(u1);
        boolean contains1 = c.contains(u2);
        //因为User没有重写equals方法,所以比较的是内存地址
        System.out.println(contains1);//false
        c.remove(u2);
        System.out.println(c.size());//1
    }
}
class User {
    private String name;

    public User(String name) {
        this.name = name;
    }
}
posted @ 2020-12-06 14:37  阿灿呀  阅读(133)  评论(0)    收藏  举报