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();
    }

しかし、何かが間違っています: myArrayList<Student> schoolを反復処理する代わりに、次を使用しit.toString()ます:

java.util.ArrayList$Itr@188e490
java.util.ArrayList$Itr@188e490
...

どうしたの?

4

4 に答える 4

14

なぜだめですか ?

school.remove(studentToCompare);

List remove(Object)メソッドを使用します。

指定された要素が存在する場合、このリストから最初に出現する要素を削除します (オプションの操作)。

そして更に

このリストに指定された要素が含まれていた場合 (または、呼び出しの結果としてこのリストが変更された場合) は true を返します。

于 2013-06-15T11:58:40.537 に答える
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);

後の 2 つの例でschoolは、 がList.

于 2013-06-15T12:02:44.270 に答える
1

この出力が得られる理由は、オブジェクトではなくtoString()メソッドを呼び出しているためです。iteratorStudent

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 + "]";
}
于 2013-06-15T11:58:21.243 に答える