5

如果找到,我想查找条目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
...

怎么了?

4

4 回答 4

22

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());
}
于 2013-06-15T11:56:49.907 回答
14

为什么不 ?

school.remove(studentToCompare);

使用 List remove(Object)方法。

如果指定元素存在,则从该列表中删除第一次出现的指定元素(可选操作)。

而且

如果此列表包含指定的元素(或等效地,如果此列表因调用而更改),则返回 true。

于 2013-06-15T11:58:40.537 回答
1

您获得此输出的原因是因为您在对象上而不是对象上调用toString()方法。iteratorStudent

您可以student使用从列表中删除

school.remove(student);

另外,如果您想在编写时打印有意义的学生对象信息

System.out.println(student);

覆盖toString()它的方法,因为System.out.println()语句将toString()在内部调用student对象。

public String toString() {
    return "Student [id=" + id + ", firstName=" + firstName
            + ", lastName=" + lastName + "]";
}
于 2013-06-15T11:58:21.243 回答
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());
}

或者

school.remove(school.indexOf(studentToCompare));

或者

school.remove(studentToCompare);

后两个示例假设schoolList.

于 2013-06-15T12:02:44.270 回答