Sobes.tech
Junior

Kuo skiriasi masyvas nuo sąrašo?

sobes.tech AI

Atsakymas iš AI

Masivas turi fiksuotą dydį, kuris nustatomas kuriant. Sąrašas dinamiškai keičia savo dydį, pridedant arba pašalinant elementus:

Masivo elementų prieiga per indeksą yra O(1) laiko. Prieigos prie sąrašo elementų laikas gali skirtis, pavyzdžiui, viengubo susietas sąrašas turi prieigą per indeksą už O(n), o ArrayList – vidutiniškai už O(1):

Masive elementai saugomi nuosekliuose atminties segmentuose, kas užtikrina geresnį talpyklos našumą. Sąraše elementai gali būti išsibarsčiusiose atminties vietose, susieti rodykliais:

Vidutiniškai, masyvo įterpimo ir ištrynimo operacijos reikalauja perkelti visus vėlesnius elementus, kas gali būti brangu (O(n)). Sąrašuose šios operacijos gali būti efektyvesnės (pavyzdžiui, susietuose sąrašuose, jei yra rodyklė į reikalingą elementą, O(1), kitaip – O(n) paieškai), tačiau reikalauja rodyklių atnaujinimo:

Masyvai gali tiesiogiai saugoti pagrindinius tipus. Sąrašai dažniausiai saugo nuorodas į objektus (apvalkale pagrindiniams tipams):

// Masivo pavyzdys
int[] array = new int[5];
array[0] = 10; // Prieiga O(1)

// ArrayList pavyzdys (Java)
import java.util.ArrayList;
import java.util.List;

List<Integer> list = new ArrayList<>();
list.add(10); // Pridėjimas vidutiniškai O(1)
list.get(0); // Prieiga O(1) vidutiniškai
# Masivo pavyzdys (numpy array)
import numpy as np
array = np.array([1, 2, 3]) # Fiksuotas dydis

# Sąrašo pavyzdys
list_data = [1, 2, 3]
list_data.append(4) # Dvinamis dydis
list_data[0] # Prieiga O(1)

Palyginimas:

Savybė Masivas Sąrašas
Dydis Fiksuotas Dvinamis
Prieiga per indeksą O(1) Keičiasi (dažniausiai O(1) arba O(n))
Atmintis Nuosekli Gali būti išsibarsčiusi
Įterpimas/Ištrynimas O(n) viduryje Keičiasi (gali būti O(1))
Duomenų tipai Pagrindiniai tipai ir objektai Paprastai nuorodos į objektus