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