Sobes.tech
Junior — Middle

ArrayList түзүмүнө жаңы элемент кошуу үчүн кандай кадамдар аткарылат?

sobes.tech AI

AIден жооп

ArrayList-ке жаңы элемент кошуу үчүн төмөнкү кадамдар аткарылат:

  1. Ички массив (адатта Object[]) азыркы учурда жаңы элементти сактай алабы деп текшерилет.
  2. Эгер орун жетишсиз болсо, көбөйтүлгөн өлчөмдө (адатта 50% же 1.5 эсе чоң) жаңы массив түзүлүп, бардык элементтер ага көчүрүлөт.
  3. Жаңы элемент ички массивдин биринчи бош ордуна коюлат.
  4. Тизмедеги өлчөм санагыч (size) көбөйтүлөт.

Элемент кошуу көбүнчө мындай жүргүзүлөт:

public boolean add(E e) {
    ensureCapacityInternal(size + 1);  // массивди текшерүү жана кеңейтүү
    elementData[size++] = e;            // элементти кошуу жана өлчөмдү көбөйтүү
    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% көбөйтүү
    if (newCapacity - minCapacity < 0)
        newCapacity = minCapacity;
    elementData = Arrays.copyOf(elementData, newCapacity);
}