Sobes.tech
Junior — Middle

Millised sammud tehakse uue elemendi lisamiseks ArrayList struktuuri?

sobes.tech AI

Vastus AI-lt

Kui ArrayList-i lisatakse uus element, tehakse järgmised sammud:

  1. Kontrollitakse, kas praegune sisemine massiiv (tavaliselt Object[]) on piisavalt suur uue elemendi salvestamiseks.
  2. Kui ruumi ei ole piisavalt, luuakse uus massiiv suurendatud suurusega (tavaliselt 50% või 1,5 korda suurem), ja kõik elemendid kopeeritakse sinna.
  3. Uus element asetatakse sisemise massiivi esimesele vabadale positsioonile.
  4. Suuruse loendur (size) suurendatakse.

Tavaliselt lisatakse element järgmiselt:

public boolean add(E e) {
    ensureCapacityInternal(size + 1);  // kontroll ja massiivi laiendamine
    elementData[size++] = e;            // element lisamine ja suuruse suurendamine
    return true;
}

private void ensureCapacityInternal(int minCapacity) {
    if (minCapacity - elementData.length > 0)
        grow(minCapacity);
}

private void grow(int minCapacity) {
    int oldCapacity = elementData.length;
    int newCapacity = oldCapacity + (oldCapacity >> 1); // 50% suurendamine
    if (newCapacity - minCapacity < 0)
        newCapacity = minCapacity;
    elementData = Arrays.copyOf(elementData, newCapacity);
}