在List集合中remove()方法的学习历程

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可以看到底层代码:在List集合中remove()方法的学习历程
可以注意到remove方法中有用到equals方法在上面重写equals方法后一可以判断list中对象是否属于要判断的对象,二是可以判断对象的属性是否相等,即可实现删除集合中对象的属性为特定属性的对象。