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