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)

Αν το στοιχείο προστίθεται όχι στο τέλος της λίστας (μέθοδος 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)