java中的ArrayList类中的remove方法,arraylistremove
分享于 点击 21579 次 点评:61
java中的ArrayList类中的remove方法,arraylistremove
在java中如果调用了ArrayList中的remove方法,其本质上是将要remove的对象与list中的每一个对象进行比较,比较的方法是调用Object中的equals方法,本质上是比较2个对象的内存地址是否一样。如下面的代码:我们想删除一个Employee对象,所以我们就new了一个和原来Employee对象内容完全一样的对象,很显然这样是不能remove掉的,因为调用remove方法的时候其实是调用Employee中的equals方法,因为Employee类并没有重写Object的equals方法,所以调用的还是Object的equals方法,本质上是比较2个对象的内存地址,显然是不一样的。
import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class ArrayListTest4 { /** * @param args */ public static void main(String[] args) { List<Employee> empList = new ArrayList<Employee>(); empList.add(new Employee(1,"jack")); Employee emp1 = new Employee(2,"tom"); empList.add(emp1); //jack Employee emp11 = new Employee(1,"jack"); //调用的是emp的equals方法 empList.remove(emp11); Iterator it = empList.iterator(); while(it.hasNext()){ Employee emp = (Employee)it.next(); System.out.println("name:"+emp.getName()); } } }
如果要实现上面的代码,我们就要在Employee类中重写Object的equals方法,代码如下:
import java.util.Date;
public class Employee {
private int empID;
private String name;
private Date birthday = new Date();
private float salary = 3000.0f;
public Employee(int empID, String name) {
this.empID = empID;
this.name = name;
}
public int getEmpID() {
return empID;
}
public void setEmpID(int empID) {
this.empID = empID;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public float getSalary() {
return salary;
}
public void setSalary(float salary) {
this.salary = salary;
}
@Override
public boolean equals(Object obj) {
boolean flag = obj instanceof Employee;
if(flag == false){
return false;
}
Employee emp = (Employee)obj;
if(this.getEmpID()==emp.getEmpID() && this.getName().equals(emp.getName())){
return true;
}else {
return false;
}
}
}
这样的话就能实现了,重写后的equals方法实质上是比较Employee对象中的内容,ArrayList中的contains方法的实现也是这样的相关文章
- 暂无相关文章
用户点评