Sobes.tech
Junior

რამდენად რთულია ელემენტის დამატება ArrayList-ში?

sobes.tech AI

პასუხი AI-სგან

საშუალო შემთხვევაში ArrayList-ში ელემენტის დამატების სირთულე შეადგენს O(1)-ს.

ეს მიღწეულია დინამიური მასივის გამოყენებით, და დამატება ხდება სიის ბოლოში.

// სიის ბოლოში დამატება
List<String> list = new ArrayList<>();
list.add("element"); // საშუალო შემთხვევაში O(1)

თუმცა, თუ ArrayList-ის შიდა მასივი სავსეა, საჭიროა მისი ზომის გაზრდა (resize). ეს მოიცავს ახალი, დიდი მასივის შექმნას და ყველა არსებული ელემენტის გადატანას ახალ მასივში. ამ ოპერაციის სირთულე შეადგენს O(n), სადაც n არის სიის მიმდინარე ზომა.

// მაგალითი, სადაც შეიძლება მოხდეს resize
List<Integer> numbers = new ArrayList<>(3); // საწყისი მოცულობა 3
numbers.add(1);
numbers.add(2);
numbers.add(3);
numbers.add(4); // აქ შეიძლება მოხდეს resize - O(n)

თუ ელემენტი ემატება სიის შუა ან დასაწყისში (metodით add(int index, E element)), საჭიროა ყველა შემდეგი ელემენტის გადატანა ერთ პოზიციაზე მარჯვნივ. ამ ოპერაციის სირთულე შეადგენს O(n), სადაც n არის გადატანილი ელემენტების რაოდენობა.

// სიის დასაწყისში დამატება
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)