Új hozzászólás Aktív témák

  • Szmeby

    tag

    válasz btraven #11495 üzenetére

    Normális esetben kompatibilis. Ha valóban CME-t dob, akkor a jelek szerint az Army objektumaid nyilvántartják magukban, hogy a defenderArmies collection részei, és valamelyik remove (gondolom az utóbbi) el akarja távolítani saját magát a defenderArmies collection-ből is.

    És ha ez a helyzet, míg az iteratoros példa CME nélkül lefut, akkor szerintem hibázik. Mivel az iterator saját állapotot tart fenn, hogy tájékozódjon a collectionben, őt különösebben nem zavarja, ha menet közben törölsz a listából, de ha ezt nem közlöd az iteratorral, akkor minimum hibás eredményt hoz, pl. nem töröl mindent, vagy nem azt törli, amit kellene, nem tudom.
    Az iterator tényleg lefut, míg a foreach elszáll?

    A helyes iterator használat valahogy így nézne ki:
    Iterator<Army> iter = defenderArmies.iterator();
    while (iter.hasNext()) {
    Army army = iter.next();
    // do sth with army
    iter.remove();
    }

    Az iter.remove() mondja meg az iteratornak, hogy itt törlés van, és vissza kell léptetnie a kurzorát. Enélkül, hát, csodálom, hogy nem dob hibát.

Új hozzászólás Aktív témák

Hirdetés