通过Iterator从ArrayList中删除元素

时间:2013-06-15 11:53:58

标签: java

我想查看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 个答案:

答案 0 :(得分:19)

itIterator,而不是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);

后两个示例假设schoolList