Sobes.tech
Middle

ArrayList қолданылып жасалған тізімнің ортасынан бірнеше көршілес элементтерді жою үшін тиімді алгоритм ұсыныңыз.

sobes.tech AI

AI-дан жауап

Ең тиімді әдіс - ArrayList ортасынан бірнеше көршілес элементтерді жою үшін removeRange әдісін пайдалану.

import java.util.ArrayList;
import java.util.List;

public class ArrayListRemoveExample {

    public static void main(String[] args) {
        List<Integer> list = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            list.add(i);
        }
        System.out.println("Бастапқы тізім: " + list);

        int startIndex = 3; // Бастапқы индекс (қосу)
        int endIndex = 6;   // Соңғы индекс (шамамен)

        ((ArrayList<Integer>) list).removeRange(startIndex, endIndex); // startIndex-ден endIndex-ке дейінгі элементтерді жою

        System.out.println("Элементтері жойылғаннан кейінгі тізім: " + list);
    }
}

removeRange әдісі ArrayList класының қорғалған (protected) әдісі болғандықтан, оны пайдалану үшін коллекцияны нақты ArrayList типіне түрлендіру қажет. Бұл әдіс элементтерді жылжыту бойынша ең тиімді жүзеге асырылады.

ArrayList-тің ортасынан k элементін жою операциясының күрделілігі O(n-i) құрайды, мұнда n - тізімнің өлшемі, ал i - жоюдың бастапқы индексі. removeRange элементтерді бір өту арқылы жылжытады. Әрбір жойылатын элемент үшін remove(int index) әдісін қайта қолдану күрделілігін O(k * (n-i)) дейін арттырады, бұл тиімді емес.