1、List中的类型为String时
ArrayList<String> list = new ArrayList<String>();
list.add("tom");
list.add("zzs");
list.add("zcs");
list.remove("tom");
System.out.println(list);
上述代码执行结果为:
[zzs,zcs]
由此可看出remove(Object o)可使用值将想要删除的元素删除。
2、List中的类型为Integer时
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
list.remove(3);
System.out.println(list);
上述代码执行结果为:[1, 2, 3]
可见并不是我们想要的结果,因为此处执行的是remove(index)删除的是索引为3的元素,也就是4。
如果想要删除值为3的元素该如何做呢?
看如下代码
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
list.remove(new Integer(3));
System.out.println(list);
输出结果为:[1, 2, 4]
3、List集合中的类型为对象时
(1)、类型为具体对象时
ArrayList<Student> list = new ArrayList<>();
list.add(new Student("1"));
list.add(new Student("1"));
Student stu = new Student("1");
list.remove(stu);
此处只删除了stu,此处删除操作不能使用list.remove(new Student(“1”))。
(2)、类型为Object时
ArrayList<Object> list = new ArrayList<>();
list.add(new Student("1"));//在list中加入Student对象
list.add(new Dog());//在list中加入Dog对象
Student stu = new Student("1");
list.remove(stu);//删除id为1的对象
System.out.println(stu);
//以下为Student类
public class Student {
public String id;
@Override
public boolean equals(Object obj) {//重写了equals方法,
if(obj instanceof Student) {//判断对象是否是Student对象
Student student = (Student)obj;//上转型对象转为下转型
return this.id.equals(student.id);
}
return false;
}
}
为什么要重写equals方法?
ctrl+点击remove可以看到底层代码:
可以注意到remove方法中有用到equals方法,在上面重写equals方法后,一可以判断list中对象是否属于要判断的对象,二是可以判断对象的属性是否相等,即可实现删除集合中对象的属性为特定属性的对象。