黑马程序员技术交流社区
标题:
remove为什么会依赖元素中的equals方法
[打印本页]
作者:
赵国刚
时间:
2013-8-14 22:33
标题:
remove为什么会依赖元素中的equals方法
本帖最后由 赵国刚 于 2013-8-15 18:34 编辑
import java.util.*;
class Person
{
private String name;
private int age;
Person(String name,int age)
{
this.name = name;
this.age = age;
}
public boolean equals(Object obj)
{
Person p = (Person)obj;
return this.name.equals(p.name) && this.age == p.age;
}
}
class ArrayListTest
{
public static void sop(Object obj)
{
System.out.println(obj);
}
public static void main(String[] args)
{
ArrayList al = new ArrayList();
al.add(new Person("lisi03",33));
sop(al.remove(new Person("lisi03",33)));
//remove方法底层也是依赖于元素的equals方法。
}
}
remove方法底层也是依赖于元素的equals方法。什么意思?结果为何为true
作者:
sergio
时间:
2013-8-15 00:10
public boolean remove(Object o)移除此列表中首次出现的指定元素(如果存在)。如果列表不包含此元素,则列表不做改动。更确切地讲,移除满足 (o==null ? get(i)==null : o.equals(get(i))) 的最低索引的元素(如果存在此类元素)。如果列表中包含指定的元素,则返回 true(或者等同于这种情况:如果列表由于调用而发生更改,则返回 true)。
作者:
kmter
时间:
2013-8-16 23:30
这应该是毕向东老师Java基础教学视频中的代码吧?
当调用了remove方法, java会首先调用该方法导入的参数对象的equals方法, 从下标为0的元素开始依次判断是否相同, 若equals返回true则删除该元素并返回true.
不过有一种特殊情况, 就是导入的参数对象为null时, java会依次寻找列表中同样为null的元素然后删除该元素, 与上面的原理相同.
所以, 这里remove方法返回的true表达的意思有两种. 一, 是我(java)在列表中找到了这个元素, 二, 我在列表中删除了这个元素.
下面是ArrayList中remove方法的实现代码:
public boolean remove(Object o) {
if (o == null) {
for (int index = 0; index < size; index++)
if (elementData[index] == null) {
fastRemove(index);
return true;
}
} else {
for (int index = 0; index < size; index++)
if (o.equals(elementData[index])) {
fastRemove(index);
return true;
}
}
return false;
}
复制代码
这里我又要提出一个疑问了, 这样实现的话, 在列表中包含大量相同元素时调用了remove方法岂不是只能删除最靠前的仅一个元素?求大牛指教
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2