Sobes.tech
Junior — Middle

Kuidas määratakse ajakulude keerukus, lisades elementi ArrayListi?

sobes.tech AI

Vastus AI-lt

ArrayList elementide lisamise ajakulud on tavaliselt amortiseeritud tasemel O(1). See tuleneb sellest, et:

  • Kui ArrayListi sisemine massiiv on vaba ruumi, kirjutatakse uus element lihtsalt järgmisele positsioonile — operatsioon võtab konstantselt aega O(1).
  • Kui sisemine massiiv on täis, toimub selle laienemine: luuakse suurem massiiv ja kõik elemendid kopeeritakse sinna. See operatsioon võtab O(n) aega, kus n on nimekirja praegune suurus.

Kuid laienemine ei toimu iga lisamise korral, vaid perioodiliselt, seega jääb lisamise keskmine (amortiseeritud) keerukus O(1)-le.

Näide:

ArrayList<Integer> list = new ArrayList<>();
list.add(10); // Amortiseeritud O(1)