Kolekcje
Przegląd zagadnień
Lista
Kolejka
Stos
Słownik
Podsumowanie
Pytania sprawdzające
Laboratorium
Lista
Jedną z wad tablic jest ich stały rozmiar,
zawsze może zabraknąć miejsca na
dane lub też zwyczajnie może go być za
dużo
Klasa List jest tablicą, która w razie
potrzeby zmienia długość. W momencie
jej tworzenia nie jest konieczne
definiowanie liczby przechowywanych
przez nią obiektów.
Klasa List wyposażona jest w ciekawe
metody i właściwości, jedną z
najczęściej wykorzystywanych jest Add()
pozwalająca dodawać elementy listy.
Lista – przykład (1)
Kod C# - część pierwsza
using System;
using System.Collections.Generic;
namespace Kolekcja {
public class Pracownik {
private int idPrac;
public Pracownik(int idPrac) {
this.idPrac = idPrac;
}
public override string ToString() {
return idPrac.ToString();
}
public int IdPrac {
get {
return idPrac;
}
set {
idPrac = value;
}
}
}
Lista – przykład (2)
Kod C# - część druga
public class Tester {
static void Main() {
List<Pracownik> pracList = new List<Pracownik>();
List<int> intList = new List<int>();
for (int i = 0; i < 5; i++ ) {
pracList.Add( new Pracownik(i + 100));
intList.Add( i * 5);
}
for(int i=0; i < intList.Count; i++) {
Console.Write("{0} ", intList[i].ToString());
}
Console.WriteLine(" \n ");
for (int i = 0; i < pracList.Count; i++) {
Console.Write("{0} ", pracList[i].ToString());
}
Console.WriteLine(" \n ");
}
}
}
Kolejka
Kolejka jest kolekcją typu FIFO (ang.
First-In, First-Out), co oznacza, że
pierwszy dołączony element jest również
obsłużony jako pierwszy
Ten typ kolekcji dobrze sprawdza się w
sytuacji dysponowania ograniczonymi
zasobami
Klasa Queue udostępnia kilka
przydatnych metod – jak Enqueue() – do
dodawania elementów do kolejki,
Dequeue() – usuwa element z kolejki
zwracając jego wartość czy Peek()
zwracająca pierwszy element kolejki bez
usuwania z kolejki
Kolejka – przykład
Kod C#
using System;
using System.Collections.Generic;
namespace Kolejka {
public class Ruch {
static void Main() {
Queue<Int32> Kolejeczka = new Queue<Int32>();
for (int i = 0; i < 6; i++) {
Kolejeczka.Enqueue(i * 5);
}
Console.Write("Wyświetlam kolejkę:\t");
Wyswietl(Kolejeczka);
Console.WriteLine("\n(Dequeue)\t{0}", Kolejeczka.Dequeue());
Wyswietl(Kolejeczka);
Console.WriteLine("\n(Peek)\t{0}", Kolejeczka.Peek());
Wyswietl(Kolejeczka);
}
public static void Wyswietl(IEnumerable<Int32> Kolekcja) {
IEnumerator<Int32> licznik = Kolekcja.GetEnumerator();
while (licznik.MoveNext())
Console.Write("{0} ", licznik.Current);
Console.WriteLine();
}
}
}
Stos
Stos jest kolekcją typu LIFO (ang. Last-
In, First-Out) – ostatni element jest
zawsze wykorzystywany jako pierwszy
Do dodawania i usuwania elementów
ze stosu służą metody Push() oraz
Pop(). W klasie Stack istnieje również
metoda Peek(), o działaniu
analogicznym do metody
wykorzystanej w przykładzie kolejki
Stos – przykład
Kod C#
using System;
using System.Collections.Generic;
namespace Stos {
public class Ruch {
static void Main() {
Stack<Int32> Stosik = new Stack<Int32>();
for (int i = 0; i < 4; i++) {
Stosik.Push(i * 5);
}
Console.Write("Wyświetlam stos:\t");
Wyswietl(Stosik);
Console.WriteLine("\n(Pop)\t{0}", Stosik.Pop());
Wyswietl(Stosik);
Console.WriteLine("\n(Peek)\t{0}", Stosik.Peek());
Wyswietl(Stosik);
}
public static void Wyswietl(IEnumerable<Int32> Kolekcja) {
IEnumerator<Int32> licznik = Kolekcja.GetEnumerator();
while (licznik.MoveNext())
Console.Write("{0} ", licznik.Current);
Console.WriteLine();
}
}
}
Słownik
Słownik jest rodzajem kolekcji (klasa
Dictionary), która zawiera wartości
powiązane z kluczami
Słowniki warto stosować zamiast tablic
w sytuacjach, gdy trzeba odwoływać się
do wielu elementów po indeksach – na
przykład przy powiązaniu danej osoby z
numerem rejestracji jej samochodu
Słownik udostępniany przez platformę
.NET umożliwia łączenie dowolnego typu
klucza z dowolnym typem wartości
Przy projektowaniu słownika należy
pamiętać, że klucz powinien być prosty
Podsumowanie
Podstawowe typy kolekcji to tablice,
listy, kolejki, stosy i słowniki
Przed wyborem typu kolekcji warto
zastanowić się, która będzie
najodpowiedniejsza dla
przygotowywanej przez nas aplikacji –
nie zawsze wygodnie jest używać
tablicy
Sprawniejsza obsługa kolekcji jest
możliwa dzięki wykorzystaniu
odpowiednich interfejsów
Pytania sprawdzające
Wymień podstawowe różnice między
kolejką a stosem.
Kiedy lepiej używać tablic zamiast
podanych na bieżących zajęciach
typów kolekcji?
Laboratorium