Sobes.tech
Junior

Na czym polega różnica między tablicą a listą?

sobes.tech AI

Odpowiedź od AI

Tablica ma stały rozmiar, określany podczas tworzenia. Lista dynamicznie zmienia swój rozmiar podczas dodawania lub usuwania elementów.

Dostęp do elementów tablicy odbywa się po indeksie w czasie O(1). Dostęp do elementów listy może się różnić, na przykład, jednokierunkowa lista ma dostęp po indeksie w O(n), a ArrayList w średnio O(1).

W tablicy elementy są przechowywane w ciągłych obszarach pamięci, co zapewnia lepszą wydajność cache. W liście elementy mogą być rozproszone w pamięci, powiązane wskaźnikami.

Operacje wstawiania i usuwania w środku tablicy wymagają przesunięcia wszystkich kolejnych elementów, co może być kosztowne (O(n)). W listach te operacje mogą być bardziej wydajne (np. w listach powiązanych O(1), jeśli mamy wskaźnik na element, w przeciwnym razie O(n) dla wyszukiwania), ale wymagają aktualizacji wskaźników.

Tablice mogą przechowywać bezpośrednio typy prymitywne. Listy zazwyczaj przechowują odwołania do obiektów (opakowania dla typów prymitywnych).

// Przykład tablicy
int[] array = new int[5];
array[0] = 10; // Dostęp O(1)

// Przykład ArrayList (lista w Java)
import java.util.ArrayList;
import java.util.List;

List<Integer> list = new ArrayList<>();
list.add(10); // Dodanie O(1) w średnim przypadku
list.get(0); // Dostęp O(1) w średnim przypadku
# Przykład tablicy (numpy array)
import numpy as np
array = np.array([1, 2, 3]) # Stały rozmiar

# Przykład listy
dane_lista = [1, 2, 3]
lista_dane.append(4) # Dynamiczny rozmiar

lista_dane[0] # Dostęp O(1)

Porównanie:

Cecha Tablica Lista
Rozmiar Stały Dynamiczny
Dostęp po indeksie O(1) Zmienny (często O(1) lub O(n))
Pamięć Kontynuowana Może być rozproszona
Wstawianie/Usuwanie O(n) w środku Zmienny (może być O(1))
Typy danych Prymitywy i obiekty Zazwyczaj odwołania do obiektów