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

  • WonderCSabo

    félisten

    válasz Aethelstone #5472 üzenetére

    Ez nem igaz. Nézzük csak meg pl. az ArrayList iterátorának a forráskódját:

    public void remove() {
    if (lastRet < 0)
    throw new IllegalStateException();
    checkForComodification();

    try {
    ArrayList.this.remove(lastRet);
    cursor = lastRet;
    lastRet = -1;
    expectedModCount = modCount;
    } catch (IndexOutOfBoundsException ex) {
    throw new ConcurrentModificationException();
    }
    }

    Ez simán ráhív a ArrayList.this.remove(lastRet) -ra ami ténylegesen kitörli az elemet.

    Vagy nézzük meg az Androidos implementációt:

    public void remove() {
    Object[] a = array;
    int removalIdx = removalIndex;
    if (modCount != expectedModCount) {
    throw new ConcurrentModificationException();
    }
    if (removalIdx < 0) {
    throw new IllegalStateException();
    }
    System.arraycopy(a, removalIdx + 1, a, removalIdx, remaining);
    a[--size] = null; // Prevent memory leak
    removalIndex = -1;
    expectedModCount = ++modCount;
    }

    Itt még egyértelműbben látszik, hogy az arraycopyval odébb mozgatja az egészet eggyel.

    Az állításod már ott megbukott, hogy a "végén kikapja az elemeket". Milyen végén? Itt nincs semmi esemény, amihez ezt köthetni lehetne, in-place kell kitörölni az elemet.

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