日期:2014-05-20  浏览次数:20657 次

请教一个关于Arraylist的问题,谢谢
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)就行了;
这是为什么?



------解决方案--------------------
前者存放的是匿名对象,如果要获取该对象只有新建对象然后用equals来匹配
后者对象名称为p1,可以直接通过p1来得到该对象。
------解决方案--------------------
remove(Object o)删除的时候传入值不为空的话,会遍历整个list,然后找到跟o equals以后为true的对象,删除掉,而equals默认比较的是引用,所以后一种直接传入想要删除对象的句柄即可删除,前一种没有句柄指向它,不能通过相同引用来找到,你只能重写equals方法,通过自己特定的逻辑来判断两个对象是否相同,然后删除。
------解决方案--------------------
只能说你对JAVA基础不好