Collections Flashcards

1
Q

Grundlagen (Arrays vs. Collections)

A

Ein Array ist eine Klasse und ein statischer Container freier und belegter
Elementpositionen
› Collections stellen eine Sammlung an Klassen dar
› Arrays besitzen eine vordefinierte Länge, welche nach der Instanziierung nicht
mehr verändert werden kann
› Objekte auf der Basis von Klassen aus der Sammlung Collections können
hinsichtlich ihrer Größe dynamisch wachsen und schrumpfen
› Für Manipulationen der Werte von Arrays muss Code geschrieben werden,
Collection-Objekte besitzen ihre eigenen Methoden und verwalten sich selbst
› Man unterscheidet einfache, nichtgenerische Collections, die Daten
beliebigen Typs aufnehmen können, und generische Collections, die im
Gegensatz dazu Typsicherheit bieten.
Nicht Generische Klassen finden sich im
Namespace: System.Collections
› Generische Klassen sind im Namespace:
System.Collections.Generics registriert
› Um den Container homogen zu halten, sind
Generische den Nicht-Generischen Collections
vorzuziehen

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Die elementaren Schnittstellen

A

Die Grundfunktionalität aller Auflistungen lässt sich auf elementare Methoden
zurückführen. Deshalb werden die Gemeinsamkeiten durch Interfaces
beschrieben, die von den Auflistungsklassen implementiert werden.
› IEnumerable, ICollection, IDictionary, Ilist
› IEnumerable und ICollection werden von allen Standardauflistungsklassen
implementiert und stellen Verhaltensweisen sicher, über die jede
Auflistungsklasse verfügt.
›Das elementare Verhalten einer Auflistungsklasse (also entweder die
Indexverwaltung oder die Verwaltung mit einem Schlüssel-Wert-Paar) wird
durch die Implementierung des Interfaces IList oder des Interfaces IDictionary
beschrieben. IList ist elementar für indexbasierte Auflistungen, IDictionary ist
die Schnittstelle der Listen, die durch Schlüssel-Wert-Paare beschrieben
werden.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

ICollection, IList, IDictionary

A

Die Schnittstelle ICollection stellt allen Auflistungen die Eigenschaften Count,
IsSynchronized und SyncRoot zur Verfügung, und darüber hinaus auch die
Methode CopyTo. Die Eigenschaft Count liefert die Anzahl der Elemente einer
Auflistung zurück, die Methode CopyTo kopiert die Elemente in ein Array.
› Auflistungen, die IList implementieren, verwalten ihre Elemente über Indizes.
Die wichtigsten Methoden, die von IList zur Verfügung gestellt werden, sind
Add, Clear, Contains, Insert, IndexOf und Remove.
› IDictionary ist der Gegenspieler von IList. Während IList-implementierende
Auflistungen den Zugriff auf die Elemente über einen Index sicherstellen, erfolgt
er bei IDictionary-Auflistungen über einen Schlüssel.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

IEnumarable & IEnumerator

A

Collections arbeiten intern als Liste und besitzen somit keinen Index
(vgl. Arrays), um von einem Element zu nächsten oder zum
vorhergehendem zu gelangen
› Die Implementierung von IEnumerable schafft erst die Möglichkeit
von einem Element zu nächsten oder zum Vorgänger zu gelangen
› Collections implementieren IEnumerable per default
› Sie ist die Basisschnittstelle für nichtgenerische Auflistungen
› Somit können ForEach-Schleifen, alle Elemente von Collections
ansprechen

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

IEnumarable & IEnumerator

A

IEnumerable enthält nur die Methode GetEnumerator(), die ein Objekt
zurückliefert, das die Schnittstelle IEnumerator implementiert
› Ein Enumerator bietet die Möglichkeit, eine Auflistung elementweise zu
durchlaufen, indem dieser die Methoden: Current(), MoveNext() und Reset()
bereitstellt
› Der Enumerator wird vor den ersten Eintrag einer Auflistung positioniert
› Um ihn auf den ersten Eintrag und anschließend auf alle Folgeeinträge zeigen
zu lassen, wird die Methode MoveNext() ausgeführt
› Mit Current() wird auf den Eintrag zugegriffen, auf den der Enumerator zeigt
› Reset() setzt den Enumerator an seine Ausgangsposition zurück

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Einfache Collections

A

Einfache Collections arbeiten intern mit dem Datentyp Object.
› Dadurch können sie Elemente von beliebigen Typen speichern.
› Bei einfachen Datentypen wie z.B. int muss ein Boxing bzw.
Unboxing stattfinden.
› Das macht die Arbeit mit einfachen Collections ggf. langsam.
› Elemente aus der Collection müssen vor Verwendung auf ihren
ursprünglichen Typ gecastet werden.
› Dadurch können Laufzeitfehler entstehen.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Einfache Collections

A

ArrayList, Hashtable, SortedList, Stack, Queue

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

ArrayList

A

Speichert Elemente von beliebigen Typen.
Größe passt sich dynamisch dem Bedarf an.
Elemente werden in der ArrayList als Object gespeichert.
Elemente müssen gecastet werden wenn sie außerhalb der ArrayList
verwendet werden sollen.
Bietet diverse Methoden und Attribute zur Verwaltung der Elemente an:
– Add(), Contains(), Remove(), RemoveAt(), Clear(), …
– Count, Capacity, …

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Auszug von ArrayList-Methoden

A

Add, AddRange, Insert, InsertRange, Remove, RemoveAt, RemoveRange, IndexOf, Sort, Clear, Reverse, ToArray

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

HashTable

A

Ein Hashtable speichert Key-Value-Paare von beliebigen Typen.
› Der Key muss dabei eindeutig sein und darf nicht null sein.
› Der Zugriff auf die Elemente erfolgt immer über den Key.
› Der Zugriff auf ein bestimmtes Element ist dadurch deutlich schneller als bei
einer Liste.
› Die Elemente werden in der Reihenfolge der Hashwerte der Keys
gespeichert, ein Zugriff über einen Index ist nicht möglich.
› Hashtables können nicht mit einer for-Schleife durchlaufen werden, es muss
immer eine foreach-Schleife verwendet werden.
› Jeder Eintrag ist vom Typ: DictionaryEntry
› Zugriff auf einzelne Elemente erfolgt über Array-Klammern

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

SortedList

A

Die SortedList speichert Key-Value-Paare von beliebigen Typen.
› Der Key muss eindeutig sein und darf nicht null sein.
› Elemente werden in der Reihenfolge der Keys gespeichert (der Typ
des Key muss ggf. IComparer implementieren).
› Besonderheit bei den Keys: Der Typ des ersten Elements
bestimmt den Typ für die restlichen Elemente (Nebeneffekt der
Sortierung).
› Der Zugriff auf die Elemente kann über den Key oder über den
Index erfolgen

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Stack

A

Der Stack speichert Elemente beliebigen Typs nach dem LIFO-
Prinzip (Last In, First Out).
› Es kann immer nur ein Element auf den Stack gelegt werden, bzw.
das oberste Element entnommen werden.
› Darüber hinaus bietet ein Stack noch die Möglichkeit das oberste
Element anzusehen ohne es zu entfernen, sowie zu prüfen, ob ein
Element im Stack vorhanden ist.
› Ein Zugriff auf andere Elemente, etwa durch einen Index, ist nicht
möglich.
› Ein Stack kann mit einer foreach-Schleife durchlaufen werden.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Auszug von Stack-Methoden

A

Push, Pop, Peek

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Queue

A

Die Queue speichert Elemente beliebigen Typs nach dem FIFO-
Prinzip (First In, First Out).
› Es kann ein Element an das Ende der Queue angefügt werden,
bzw. das erste Element der Queue entnommen werden.
› Darüber hinaus bietet eine Queue noch die Möglichkeit das erste
Element anzusehen ohne es zu entfernen, sowie zu prüfen, ob ein
Element in der Queue vorhanden ist.
› Ein Zugriff auf andere Elemente, etwa durch einen Index, ist nicht
möglich.
› Eine Queue kann mit einer foreach-Schleife durchlaufen werden.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Auszug von Queue-Methoden

A

Enqueue, Deququq, Peek

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Generische Collections

A

Bei generischen Collections wird bei der Instanziierung per Typ-
Parameter festgelegt, welche Typen gespeichert werden können.
› Die Klassen arbeiten intern nicht mit dem Datentyp Object,
sondern mit dem bei der Instanziierung angegebenen Typ.
› Dadurch werden Laufzeitfehler beim Zugriff auf die Elemente
reduziert.
› Elemente können aus der Collection heraus ohne Casting
verwendet werden.
› Generische Collections arbeiten in der Regel schneller als
nichtgenerische Collections.

17
Q

Generische Collections

A

ArrayList, Stack, Queue, Hashtable, SortedList

18
Q

Generische Collections

A

List<T>
Stack<T>
Queue<T>
Dictionary<Tkey,SortedList<K, V>
Tvalue</T></T></T>

19
Q

Generische Collections-List<T></T>

A

Die Collection List<T> speichert Werte vom Typ T unsortiert und
repräsentiert eine Liste mit internem Array.
› Beispiel: List<string> speichert Elemente vom Typ string.
› Auf die Elemente kann per Index zugegriffen werden.
› Elemente können an jeder Stelle der Liste hinzugefügt oder entfernt
werden.
› Es können auch mehrere Elemente gleichzeitig hinzugefügt oder
entfernt werden.
› Stellt das generische Pendant zur ArrayList dar.</string></T>

20
Q

Generische Collections-Dictionary<TKey, TValue>

A

Dictionaries speichern Key-Value-Paar, wobei die Typen von Key
und Value separat definiert werden müssen.
› Key und Value können unterschiedliche Typen haben.
› Der Key muss eindeutig sein und darf nicht null sein.
› Der Value muss nicht eindeutig sein und kann auch null sein.
› Die Elemente werden unsortiert gespeichert.
› Der Zugriff auf die Elemente geschieht über den Key.
› Stellt das generische Pendant zum Hashtable dar.

21
Q

Generische Collections-SortedList<TKey, TValue>

A

Die SortedList speichert Key-Value-Paare, wobei die Typen von Key
und Value separat definiert werden müssen.
› Der Key muss eindeutig sein und darf nicht null sein.
› Der Value muss nicht eindeutig sein und kann auch null sein.
› Elemente werden in der Reihenfolge der Keys gespeichert (der Typ
des Key muss ggf. IComparer implementieren).
› Der Zugriff auf die Elemente erfolgt über den Key.
› Die SortedList gibt es generisch und nichtgenerisch.

22
Q

Generische Collections-Stack<T></T>

A

Der Stack<T> speichert Elemente typsicher nach dem LIFO-Prinzip
(Last In, First Out).
› Es kann immer nur ein Element auf den Stack gelegt werden, bzw.
das oberste Element entnommen werden.
› Darüber hinaus bietet ein Stack noch die Möglichkeit das oberste
Element anzusehen ohne es zu entfernen, sowie zu prüfen, ob ein
Element im Stack vorhanden ist.
› Ein Zugriff auf andere Elemente, etwa durch einen Index, ist nicht
möglich.
› Den Stack gibt es generisch und nichtgenerisch.</T>

23
Q

Generische Collections-Queue<T></T>

A

› Die Queue<T> speichert Elemente typsicher nach dem FIFO-
Prinzip(First In, First Out).
› Es kann ein Element an das Ende der Queue angefügt werden,
bzw. das erste Element der Queue entnommen werden.
› Darüber hinaus bietet eine Queue noch die Möglichkeit das erste
Element anzusehen ohne es zu entfernen, sowie zu prüfen, ob ein
Element in der Queue vorhanden ist.
› Ein Zugriff auf andere Elemente, etwa durch einen Index, ist nicht
möglich.
› Die Queue gibt es generisch und nichtgenerisch.</T>