我想查看ArrayList
中的条目,如果找到则删除元素,我猜的最简单方法是Iterator
,这是我的代码:
for (Iterator<Student> it = school.iterator(); it.hasNext();){
if (it.equals(studentToCompare)){
it.remove();
return true;
}
System.out.println(it.toString());
it.next();
}
但是出了点问题:我没有通过ArrayList<Student> school
进行迭代,而是使用了it.toString()
:
java.util.ArrayList$Itr@188e490
java.util.ArrayList$Itr@188e490
...
怎么了?
答案 0 :(得分:19)
it
是Iterator
,而不是Student
for (Iterator<Student> it = school.iterator(); it.hasNext();){
Student student = it.next();
if (student.equals(studentToCompare)){
it.remove();
return true;
}
System.out.println(student.toString());
}
答案 1 :(得分:14)
为什么不呢?
school.remove(studentToCompare);
使用列表remove(Object)方法。
从该列表中删除第一次出现的指定元素(如果存在)(可选操作)。
而且
如果此列表包含指定的元素,则返回true(或等效地,如果此列表因调用而更改)。
答案 2 :(得分:1)
您获得此输出的原因是您在toString()
而不是iterator
对象上调用Student
方法。
您可以使用
从列表中删除student
school.remove(student);
另外,如果要在编写
时打印有意义的Student对象信息System.out.println(student);
覆盖toString()
方法,因为System.out.println()
语句会在内部调用toString()
对象上的student
。
public String toString() {
return "Student [id=" + id + ", firstName=" + firstName
+ ", lastName=" + lastName + "]";
}
答案 3 :(得分:1)
for (Iterator<Student> it = school.iterator(); it.hasNext();){
**Student st** = it.next();
if (**st**.equals(studentToCompare)){
it.remove();
return true;
}
System.out.println(**st**.toString());
}
OR
school.remove(school.indexOf(studentToCompare));
OR
school.remove(studentToCompare);
后两个示例假设school
是List
。