Lista

List<T>
Lista reprezentuje listę obiektów, do których można uzyskać dostęp za pomocą indeksu. Litera “T” oznacza tutaj, że jest to lista ogólna. Jeśli nie znasz typów ogólnych to się nie martw wkrótce zaczynam nagrywać kurs w tym temacie. 🙂

W przeciwieństwie do tablic, która jest o ustalonym rozmiarze, listy mogą dynamicznie rosnąć. Dlatego nazywane są również dynamicznymi tablicami. Wewnętrznie lista wykorzystuje tablicę do przechowywania elementów. Jeśli się zapełni, utworzy nową, większą tablicę i skopiuje elementy z istniejącej tablicy do nowej. Obecnie często używa się list zamiast tablic, nawet jeśli pracujesz z ustalonym zestawem elementów.

Aby utworzyć listę:

var list = new List<int>();

Jeśli planujesz przechowywać dużą liczbę obiektów na liście, możesz zmniejszyć koszty relokacji wewnętrznej tablicy, ustawiając początkowy rozmiar:

// Tworzenie listy o początkowym rozmiarze
var list = new List<int>(500);

Oto kilka przydatnych operacji na listach:

// Dodajemy element na końcu listy
list.Add(10);
 
// Dodaj element na pozycję o indeksie 5
list.Insert(120, 5);
 
// Usuwamy element z listy
list.Remove(40);
 
// Usuwamy element o indeksie 2
list.RemoveAt(2);
 
// pobieramy element z listy o indeksie 3
var first = list[3];
 
// pobieramy indeks elementu
var index = list.IndexOf(25);

// Sprawdzamy czy lista zawiera element
var contains = list.Contains(40);
 
// Pobieramy liczbę elementów na liście
var count = list.Count;

// Możesz wyszukać pierwszy element który spełnia określone kryteria
// Metoda przyjmuje coś co nazywamy predykatem
int index = citys.FindIndex(city => city.TotalPopulation < 300000);

// Możesz wyczyścić listę, usunąć wszystkie jej elementy. 
 citys.Clear();
 
// Iterujemy po wszystkich elementach na liście
foreach (var item in list)
Console.WriteLine(item);

Zobaczmy teraz, gdzie lista działa dobrze, a gdzie nie.

Dodawanie lub usuwanie elementów na początku lub na środku.
Jeśli dodasz lub usuniesz element na początku lub na środku listy, to Lista musi przesunąć jeden lub więcej elementów w swojej tablicy wewnętrznej.
W najgorszym przypadku, jeśli dodasz / usuniesz element na samym początku listy, musi on przesunąć wszystkie istniejące elementy.
Im większa lista, tym bardziej kosztowna będzie ta operacja.

Dodawanie lub usuwanie elementów na końcu.
Dodanie lub usunięcie elementu na końcu listy jest stosunkowo szybką operacją i nie zależy od wielkości listy. Istniejące elementy nie muszą być przesuwane. Dlatego koszt tej operacji jest stosunkowo mały i stały i nie zależy od liczby pozycji na liście.

Wyszukiwanie elementu.
Podczas korzystania z metod obejmujących wyszukiwanie elementu (np. IndexOf, Contains and Find), Lista wykonuje wyszukiwanie liniowe. Oznacza to, że iteruje wszystkie elementy w swojej wewnętrznej tablicy i jeśli znajdzie dopasowanie, zwraca je. W najgorszym przypadku, jeśli ten element znajduje się na końcu listy, wszystkie elementy na liście muszą zostać zeskanowane przed znalezieniem dopasowania. Ponownie, jest to kolejny przykład, w którym koszt znalezienia dopasowania jest liniowy i jest wprost proporcjonalny do liczby elementów na liście.

Dostęp do elementu za pomocą indeksu. 
W tym są bardzo dobre listy. Możesz użyć indeksu, aby uzyskać pozycję na liście i bez względu na to, jak duża jest lista, koszt dostępu do pozycji według indeksu pozostaje względnie mały i stały.

Lista w pigułce
Tak więc dodawanie lub usuwanie elementów na końcu listy i uzyskiwanie dostępu do elementów według indeksu to szybkie i wydajne operacje.

Wyszukiwanie pozycji na liście obejmuje wyszukiwanie liniowe. Jeśli chcesz wyszukać elementy na podstawie niektórych kryteriów, a nie indeksu (np. Klient o identyfikatorze 5674), lepiej skorzystaj ze Słownika.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *