Galileo Computing < openbook > Galileo Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

Inhaltsverzeichnis
Vorwort zur 5. Auflage
1 Allgemeine Einführung in .NET
2 Grundlagen der Sprache C#
3 Klassendesign
4 Vererbung, Polymorphie und Interfaces
5 Delegates und Ereignisse
6 Weitere .NET-Datentypen
7 Weitere Möglichkeiten von C#
8 Auflistungsklassen (Collections)
9 Fehlerbehandlung und Debugging
10 LINQ to Objects
11 Multithreading und die Task Parallel Library (TPL)
12 Arbeiten mit Dateien und Streams
13 Binäre Serialisierung
14 Einige wichtige .NET-Klassen
15 Projektmanagement und Visual Studio 2010
16 XML
17 WPF – Die Grundlagen
18 WPF-Containerelemente
19 WPF-Steuerelemente
20 Konzepte der WPF
21 Datenbindung
22 2D-Grafik
23 ADO.NET – verbindungsorientierte Objekte
24 ADO.NET – Das Command-Objekt
25 ADO.NET – Der SqlDataAdapter
26 ADO.NET – Daten im lokalen Speicher
27 ADO.NET – Aktualisieren der Datenbank
28 Stark typisierte DataSets
29 LINQ to SQL
30 Weitergabe von Anwendungen
Stichwort

Buch bestellen
Ihre Meinung?

Spacer
<< zurück
Visual C# 2010 von Andreas Kühnel
Das umfassende Handbuch
Buch: Visual C# 2010

Visual C# 2010
geb., mit DVD
1295 S., 49,90 Euro
Rheinwerk Computing
ISBN 978-3-8362-1552-7
Pfeil 8 Auflistungsklassen (Collections)
Pfeil 8.1 Die Listen des Namespace »System.Collections«
Pfeil 8.1.1 Die elementaren Schnittstellen der Auflistungsklassen
Pfeil 8.2 Die Klasse »ArrayList«
Pfeil 8.2.1 Einträge hinzufügen
Pfeil 8.2.2 Datenaustausch zwischen einem Array und einer ArrayList
Pfeil 8.2.3 Die Elemente einer ArrayList sortieren
Pfeil 8.2.4 Sortieren von Arrays mit »ArrayList.Adapter«
Pfeil 8.3 Die Klasse »Hashtable«
Pfeil 8.3.1 Methoden und Eigenschaften der Schnittstelle »IDictionary«
Pfeil 8.3.2 Beispielprogramm zur Klasse »Hashtable«
Pfeil 8.4 Die Klassen »Queue« und »Stack«
Pfeil 8.4.1 Die »Stack«-Klasse
Pfeil 8.5 Objektauflistungen im Überblick
Pfeil 8.6 Generische Auflistungsklassen
Pfeil 8.6.1 Die Interfaces der generischen Auflistungsklassen
Pfeil 8.6.2 Die generische Auflistungsklasse »List<T>«
Pfeil 8.7 Eigene Auflistungen mit »yield« durchlaufen

8 Auflistungsklassen (Collections)

Ein charakteristisches Merkmal der Arrays ist die freie Verfügbarkeit ihrer Indizes. Sie können ein Element einem Array an einer x-beliebigen Position hinzufügen – unabhängig davon, ob der Index bereits von einem anderen Element belegt ist oder nicht. Wird ein Element aus einem Array entfernt, bleibt ein unbesetzter Index zurück. Ein Array ist somit ein statischer Pool freier und belegter Elementpositionen ohne die Fähigkeit, sich dynamisch an Änderungen anpassen zu können.

An dieser Stelle treten Klassen in Erscheinung, die ähnlich den Arrays als Container meist typgleicher Elemente dienen. Im Unterschied zu den herkömmlichen Arrays arbeiten diese Klassen jedoch dynamisch: Sie enthalten keine »leeren« Indizes, sondern vergrößern oder verkleinern ihre Kapazität entsprechend der Anzahl der Einträge. Ganz allgemein werden diese Klassen als Collections, als Auflistungen oder ganz einfach nur als Listen bezeichnet. Jede Klasse unterscheidet sich von der anderen durch besondere Fähigkeiten und Charakteristika – sei es die interne Verwaltung der Objekte, der Zugriff auf die Einträge oder die Geschwindigkeit, mit der innerhalb einer Liste nach einem bestimmten Eintrag gesucht werden kann.

Leider wurden die Generics erst mit dem .NET Framework 2.0 eingeführt. Wäre dies bereits mit der Version 1.0 geschehen, wären uns viele Klassen und Interfaces erspart geblieben. So aber müssen wir bereits an dieser Stelle zwei Gruppen von Auflistungen unterscheiden:

  • die nichtgenerischen Listen, die zum Namespace System.Collections gehören
  • die generischen Listen des Namespace Systems.Collections.Generics

Wenn möglich, sollten Sie auf die generischen Collections zurückgreifen, und zwar der Typsicherheit wegen. Auch wenn das Coding der Generics im Allgemeinen etwas gewöhnungsbedürftig ist, ist am Ende die Handhabung generischer Listen deutlich einfacher, und sie sind sogar schneller als ihre nichtgenerischen Pendants. Nichtsdestotrotz werden wir natürlich auch die nichtgenerischen Listen hier exemplarisch behandeln, schließlich werden Sie im .NET Framework auf unzählige Klassen stoßen, die nach genau diesem Prinzip entwickelt worden sind.


Galileo Computing - Zum Seitenanfang

8.1 Die Listen des Namespace »System.Collections« Zur nächsten ÜberschriftZur vorigen Überschrift

Damit Sie die Namen einiger wichtiger Auflistungen schon einmal gehört haben, seien sie hier aufgeführt:

  • ArrayList
  • Hashtable
  • Queue
  • Stack
  • SortedList
  • StringCollection

Diese Klassen, die alle zum Namespace System.Collections gehören, unterscheiden sich in den Methoden, mit denen der Zugriff auf die Elemente erfolgt, darin, wie die Elemente im Speicher verwaltet werden, und dadurch, welche Operationen sich darauf ausführen lassen. Jede Klasse hat dabei ihre eigene Charakteristik.

Da sie zwei typische Vertreter vieler anderer Klassen im .NET Framework sind, wollen wir uns einen Überblick über die Charakteristik der beiden Klassen ArrayList und Hashtable verschaffen und die wesentlichsten Unterscheidungsmerkmale herausarbeiten.

Die Klasse »ArrayList«

ArrayList ähnelt außerordentlich einem klassischen Array. Im Gegensatz zu einem Array ist ein ArrayList-Objekt aber dynamisch. Sie können so lange Objekte zur Liste hinzufügen, bis dem Speicher regelrecht die Puste ausgeht. Der Zugriff auf ein Element einer ArrayList erfolgt über die Angabe des entsprechenden Index.

Die Klasse »Hashtable«

Die Klasse Hashtable beschreibt eine Liste von Elementen, die im Gegensatz zur ArrayList nicht durch einen Index verwaltet werden, sondern durch ein Schlüssel-Werte-Paar. Der Vorteil eines Hashtable-Objekts ist, dass innerhalb der Liste sehr schnell nach bestimmten Objekten gesucht werden kann. Der Name rührt daher, dass für die Verwaltung der Elemente ein Hashcode für den Schlüssel verwendet wird. Ein Hashcode ist ein Wert, der aus den Daten eines Objekts gebildet wird und somit für gleiche Objekte gleich ist. Der Zugriff auf ein Element in dieser Liste erfolgt über den Schlüsselwert, der grundsätzlich ein beliebiges Objekt sein kann. In der Praxis wird dazu meist eine Zeichenfolge benutzt.


Galileo Computing - Zum Seitenanfang

8.1.1 Die elementaren Schnittstellen der Auflistungsklassen topZur vorigen Überschrift

Die Grundfunktionalität aller Auflistungen lässt sich auf elementare Methoden zurückführen. Es ist deshalb nicht verwunderlich, dass die Gemeinsamkeiten durch Schnittstellen beschrieben werden, die von den Auflistungsklassen implementiert werden. Im Kern handelt es sich dabei um folgende Schnittstellen:

  • IEnumerable
  • ICollection
  • IDictionary
  • IList

Die beiden zuerst aufgeführten Schnittstellen IEnumerable und ICollection werden von allen Standardauflistungsklassen implementiert. Sie sichern Verhaltensweisen, über die jede Auflistungsklasse verfügt. Das elementare Verhalten einer Auflistungsklasse wird durch die Implementierung der Schnittstellen IList und IDictionary beschrieben: IList ist dabei das Interface für die indexbasierten Auflistungen, IDictionary die Schnittstelle der Auflistungen, die auf Schlüssel-Wertepaaren basieren.

Ohne zu sehr in die Details abzutauchen, wollen wir uns nun ein weniger genauer die vier genannten Schnittstellen ansehen.

Die Schnittstelle »IEnumerable«

IEnumerable ermöglicht es, eine Liste in einer foreach-Schleife zu durchlaufen, und weist nur die Methode GetEnumerator auf, die ein Objekt zurückliefert, das die Schnittstelle IEnumerator implementiert. Dieser Enumerator verfügt über die Fähigkeit, eine Auflistung elementweise zu durchlaufen. Damit gleicht dieses Objekt einem Positionszeiger, dem drei Methoden eigen sind: Current, MoveNext und Reset.

Der Enumerator positioniert sich standardmäßig vor dem ersten Eintrag einer Auflistung. Um ihn auf den ersten Eintrag und anschließend auf alle Folgeeinträge zeigen zu lassen, muss die Methode MoveNext ausgeführt werden. Mit Current wird auf den Eintrag zugegriffen, auf den der Enumerator aktuell zeigt. Reset setzt den Enumerator an seine Ausgangsposition zurück, also vor den ersten Eintrag. Alle Collections implementieren die Schnittstelle IEnumerable, sodass auch alle Auflistungen in einer foreach-Schleife durchlaufen werden können.

Die Schnittstelle »ICollection«

Die Schnittstelle ICollection stellt allen Auflistungen die Eigenschaften Count, IsSynchronized und SyncRoot zur Verfügung, und darüber hinaus auch die Methode CopyTo. Count liefert dabei die die Anzahl der Elemente einer Auflistung zurück, die Methode CopyTo kopiert die Elemente einer Auflistung in ein Array.

Auflistungen sind kritisch hinsichtlich des gleichzeitigen Zugriffs mehrerer Threads. Um diesem Umstand Rechnung zu tragen, wird die Methode Synchronized bereitgestellt. Die Eigenschaft IsSynchronized gibt an, ob die Auflistung synchronisiert ist. Es ist daher nicht verwunderlich, dass praktisch alle Standardauflistungen die Schnittstelle ICollection implementieren.

Die Schnittstelle »IList«

Auflistungen, die IList implementieren, können ihre Elemente über Indizes verwalten. Das beste Beispiel hierfür dürfte die Klasse ArrayList sein, aber auch eine große Anzahl weiterer, häufig steuerelementspezifischer Auflistungen gehört zu dieser Gruppe, unter anderem auch die Klasse Array.

Die wichtigsten Methoden, die von IList zur Verfügung gestellt werden, sind Add, Clear, Contains, Insert, IndexOf und Remove. Sie werden Collections, die diese Methoden aufweisen, überall im .NET Framework begegnen: Sei es innerhalb der WinForm-API oder bei verschiedenen Klassen von ADO.NET.

Die Schnittstelle »IDictionary«

IDictionary ist praktisch der Gegenspieler von IList. Während Auflistungen, die IList implementieren, den Zugriff auf die Elemente über einen Index sicherstellen, erfolgt er bei IDictionary-Auflistungen über einen Schlüssel. An dieser Stelle mehr über dieses Interface zu berichten, würde zu tief ins Detail führen. Aber wir werden im Zusammenhang mit der Klasse Hashtable noch darauf zu sprechen kommen.



Ihr Kommentar

Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen. >> Zum Feedback-Formular
<< zurück
  Zum Katalog
Zum Katalog: Visual C# 2010

Visual C# 2010
Jetzt bestellen


 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Buchempfehlungen
Zum Katalog: Professionell entwickeln mit Visual C# 2012






 Professionell
 entwickeln mit
 Visual C# 2012


Zum Katalog: Windows Presentation Foundation






 Windows Presentation
 Foundation


Zum Katalog: Schrödinger programmiert C++






 Schrödinger
 programmiert C++


Zum Katalog: C++ Handbuch






 C++ Handbuch


Zum Katalog: C/C++






 C/C++


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo




Copyright © Rheinwerk Verlag GmbH 2010
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


Nutzungsbestimmungen | Datenschutz | Impressum

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de

Cookie-Einstellungen ändern