ArrayList al=new ArrayList();
al.add(new Person1("wang",20));
al.add(new Person1("li",20))
;这种添加方法和
ArrayList al=new ArrayList();
Person1 p1=new Person1("niao",20);
al.add(p1);有什么不一样,
前者在删除元素时必须重写equals方法而后者完全不用直接al.remove(p1)就行了;
这是为什么?
al.add(new Person1("wang",20));
al.add(new Person1("li",20))
;这种添加方法和
ArrayList al=new ArrayList();
Person1 p1=new Person1("niao",20);
al.add(p1);有什么不一样,
前者在删除元素时必须重写equals方法而后者完全不用直接al.remove(p1)就行了;
这是为什么?
后者对象名称为p1,可以直接通过p1来得到该对象。
首先来讲,这两种方式都是一样的,没有任何的不同,至于你说的删除时需要写equals方法,这是跟判断对象相等有关系。因为默认的情况下User user1 = new User("a");User user2 = new User("a");
user1.equals(user2) ===> false
因此 list .add(user1);后,调用list.remove(user2),无法删除user1,为什么?因为list会认为在集合中不存在user2这个对象。
前者在删除元素时必须重写equals方法而后者完全不用直接al.remove(p1)就行了;
前者没有引用,现在要找出那个对象的地址比较难。因为是匿名的。
所以重写equals的方法的意思是 找出 属性相同 的元素(根据你equals的匹配规则)。然后remove掉。
后者你有p1引用,就不用通过equals匹配,直接remove掉该对象,如果你重写了equals,还是根据匹配规则remove元素。