Sobes.tech
Junior

Ինչքա՞ն է բարդությունը տարր ավելացնել ArrayList-ին:

sobes.tech AI

Պատասխան AI-ից

ArrayList-ի տարր ավելացնելու բարդությունը միջին դեպքերում կազմում է O(1):

Սա հասնում է դինամիկ զանգվածի օգտագործմամբ, և ավելացումը կատարվում է ցանկի վերջում:

// Ավելացում ցանկի վերջում
List<String> list = new ArrayList<>();
list.add("միավոր"); // միջին դեպքերում O(1)

Սակայն, եթե ArrayList-ի ներքին զանգվածը լցված է, անհրաժեշտ է մեծացման օպերացիա (resize): Դա ներառում է նոր, ավելի մեծ զանգվածի ստեղծում և բոլոր առկա տարրերի պատճենում նոր զանգվածին:

// Օրինակ, որտեղ կարող է տեղի ունենալ resize
List<Integer> numbers = new ArrayList<>(3); // սկզբնական ծավալը 3
numbers.add(1);
numbers.add(2);
numbers.add(3);
numbers.add(4); // Այստեղ կարող է տեղի ունենալ resize - O(n)

Եթե տարրն ավելացվում է ցանկի վերջում չէ (մեթոդ add(int index, E element)), այլ միջին կամ սկզբում, անհրաժեշտ է բոլոր հաջորդող տարրերը տեղափոխել աջ կողմ:

// Ավելացում սկզբում
List<String> list = new ArrayList<>();
list.add("one");
list.add("two");
list.add(0, "zero"); // Ավելացում սկզբում - O(n)

Այսպիսով, ArrayList-ին տարր ավելացնելու բարդությունը կախված է ավելացման վայրից և resize-ի անհրաժեշտությունից:

Ավելացման գործողություն Միջին դեպք Ամենավատ դեպք (երբ կա resize կամ ավելացում չի կատարվում վերջում)
add(E element) (վերջում) O(1) O(n)
add(int index, E element) O(n) O(n)