Sobes.tech
Junior

V čem spočívá rozdíl mezi polem a seznamem?

sobes.tech AI

Odpověď od AI

Pole má pevnou velikost, která je určena při jeho vytvoření. Seznam dynamicky mění svou velikost při přidávání nebo odstraňování prvků.

Přístup k prvkům pole je prováděn podle indexu v čase O(1). Přístup k prvkům seznamu se může lišit, například jednoduchý spojový seznam má přístup podle indexu v O(n), zatímco ArrayList je průměrně v O(1).

V poli jsou prvky uloženy v souvislých oblastech paměti, což zajišťuje lepší výkon cache. V seznamu mohou být prvky rozptýleny v paměti, spojeny ukazateli.

Operace vkládání a mazání uprostřed pole vyžadují přesun všech následujících prvků, což může být nákladné (O(n)). U seznamů mohou být tyto operace efektivnější (například u spojových seznamů O(1), pokud je ukazatel na prvek, jinak O(n) pro hledání), ale vyžadují aktualizaci ukazatelů.

Pole může přímo ukládat primitivní typy. Seznamy obvykle ukládají odkazy na objekty (obaly pro primitivní typy).

// Příklad pole
int[] array = new int[5];
array[0] = 10; // Přístup O(1)

// Příklad ArrayList (seznam v Javě)
import java.util.ArrayList;
import java.util.List;

List<Integer> list = new ArrayList<>();
list.add(10); // Přidání O(1) v průměru
list.get(0); // Přístup O(1) v průměru
# Příklad pole (numpy array)
import numpy as np
array = np.array([1, 2, 3]) # Pevná velikost

# Příklad seznamu
data_list = [1, 2, 3]
data_list.append(4) # Dynamická velikost

data_list[0] # Přístup O(1)

Porovnání:

Charakteristika Pole Seznam
Velikost Pevná Dynamická
Přístup podle indexu O(1) Mění se (často O(1) nebo O(n))
Paměť Kontinuální Může být rozptýlená
Vkládání/mazání O(n) uprostřed Mění se (může být O(1))
Typy dat Primitivní a objekty Obvykle odkazy na objekty