Dieser Artikel wurde maschinell übersetzt. Wenn Sie die englische Version des Artikels anzeigen möchten, aktivieren Sie das Kontrollkästchen Englisch. Sie können den englischen Text auch in einem Popupfenster anzeigen, indem Sie den Mauszeiger über den Text bewegen.
Übersetzung
Englisch

Hashtable-Klasse

 

Veröffentlicht: Oktober 2016

Stellt eine Auflistung von Schlüssel-Wert-Paaren dar, die auf Grundlage des Hashcodes des Schlüssels geordnet sind.

Informationen zum Durchsuchen des .NET Framework-Quellcodes für diesen Typ finden Sie unter der Reference Source.

Namespace:   System.Collections
Assembly:  mscorlib (in mscorlib.dll)


[SerializableAttribute]
[ComVisibleAttribute(true)]
public class Hashtable : IDictionary, ICollection, IEnumerable, 
	ISerializable, IDeserializationCallback, ICloneable

NameBeschreibung
System_CAPS_pubmethodHashtable()

Initialisiert eine neue leere Instanz der Hashtable-Klasse unter Verwendung der anfänglichen Standardkapazität, des Standardlastfaktors, Hashcode-Standardanbieters und des Standardcomparers.

System_CAPS_pubmethodHashtable(IDictionary)

Initialisiert eine neue Instanz der Hashtable-Klasse durch Kopieren der Elemente aus dem angegebenen Wörterbuch in das neue Hashtable-Objekt. Das neue Hashtable-Objekt besitzt eine Anfangskapazität, die mit der Anzahl der kopierten Elemente identisch ist, und verwendet den Standardlastfaktor, den Hashcode-Standardanbieter und den Standardcomparer.

System_CAPS_pubmethodHashtable(IDictionary, IEqualityComparer)

Initialisiert eine neue Instanz der Hashtable-Klasse durch Kopieren der Elemente aus dem angegebenen Wörterbuch in ein neues Hashtable-Objekt. Das neue Hashtable-Objekt besitzt eine Anfangskapazität, die mit der Anzahl der kopierten Elemente identisch ist, und verwendet den Standardlastfaktor sowie das angegebene IEqualityComparer-Objekt.

System_CAPS_pubmethodHashtable(IDictionary, IHashCodeProvider, IComparer)

Veraltet. Initialisiert eine neue Instanz der Hashtable-Klasse durch Kopieren der Elemente aus dem angegebenen Wörterbuch in das neue Hashtable-Objekt. Das neue Hashtable-Objekt besitzt eine Anfangskapazität, die mit der Anzahl der kopierten Elemente identisch ist, und verwendet den Standardlastfaktor sowie den angegebenen Hashcodeanbieter und den angegebenen Comparer. Diese API ist veraltet. Eine Alternative finden Sie unter Hashtable.

System_CAPS_pubmethodHashtable(IDictionary, Single)

Initialisiert eine neue Instanz der Hashtable-Klasse durch Kopieren der Elemente aus dem angegebenen Wörterbuch in das neue Hashtable-Objekt. Das neue Hashtable-Objekt besitzt eine Anfangskapazität, die mit der Anzahl der kopierten Elemente identisch ist, und verwendet den angegebenen Lastfaktor sowie den Hashcode-Standardanbieter und den Standardcomparer.

System_CAPS_pubmethodHashtable(IDictionary, Single, IEqualityComparer)

Initialisiert eine neue Instanz der Hashtable-Klasse durch Kopieren der Elemente aus dem angegebenen Wörterbuch in das neue Hashtable-Objekt. Das neue Hashtable-Objekt besitzt eine Anfangskapazität, die mit der Anzahl der kopierten Elemente identisch ist, und verwendet den angegebenen Lastfaktor und das angegebene IEqualityComparer-Objekt.

System_CAPS_pubmethodHashtable(IDictionary, Single, IHashCodeProvider, IComparer)

Veraltet. Initialisiert eine neue Instanz der Hashtable-Klasse durch Kopieren der Elemente aus dem angegebenen Wörterbuch in das neue Hashtable-Objekt. Das neue Hashtable-Objekt besitzt eine Anfangskapazität, die mit der Anzahl der kopierten Elemente identisch ist, und verwendet den angegebenen Lastfaktor, den angegebenen Hashcodeanbieter und den angegebenen Comparer.

System_CAPS_pubmethodHashtable(IEqualityComparer)

Initialisiert eine neue leere Instanz der Hashtable-Klasse unter Verwendung der anfänglichen Standardkapazität, des Standardlastfaktors und des angegebenen IEqualityComparer-Objekts.

System_CAPS_pubmethodHashtable(IHashCodeProvider, IComparer)

Veraltet. Initialisiert eine neue leere Instanz der Hashtable-Klasse unter Verwendung der anfänglichen Standardkapazität, des Standardlastfaktors, des angegebenen Hashcodeanbieters und des angegebenen Comparers.

System_CAPS_pubmethodHashtable(Int32)

Initialisiert eine neue leere Instanz der Hashtable-Klasse unter Verwendung der angegebenen Anfangskapazität, des Standardlastfaktors, des Hashcode-Standardanbieters und des Standardcomparers.

System_CAPS_pubmethodHashtable(Int32, IEqualityComparer)

Initialisiert eine neue leere Instanz der Hashtable-Klasse unter Verwendung der angegebenen Anfangskapazität und des angegebenen IEqualityComparer sowie des Standardlastfaktors.

System_CAPS_pubmethodHashtable(Int32, IHashCodeProvider, IComparer)

Veraltet. Initialisiert eine neue leere Instanz der Hashtable-Klasse unter Verwendung der angegebenen Anfangskapazität, des angegebenen Hashcodeanbieters, des angegebenen Comparers und des Standardlastfaktors.

System_CAPS_pubmethodHashtable(Int32, Single)

Initialisiert eine neue leere Instanz der Hashtable-Klasse unter Verwendung der angegebenen Anfangskapazität und des Lastfaktors sowie des Hashcode-Standardanbieter und des angegebenen Comparers.

System_CAPS_pubmethodHashtable(Int32, Single, IEqualityComparer)

Initialisiert eine neue leere Instanz der Hashtable-Klasse unter Verwendung der angegebenen Anfangskapazität, des angegebenen Lastfaktors und des angegebenen IEqualityComparer-Objekts.

System_CAPS_pubmethodHashtable(Int32, Single, IHashCodeProvider, IComparer)

Veraltet. Initialisiert eine neue leere Instanz der Hashtable-Klasse unter Verwendung der angegebenen Anfangskapazität, des angegebenen Lastfaktors, des angegebenen Hashcode-Anbieters und des angegebenen Comparers.

System_CAPS_protmethodHashtable(SerializationInfo, StreamingContext)

Initialisiert eine neue leere Instanz der Hashtable-Klasse, die serialisierbar ist, wobei die angegebenen SerializationInfo-Objekte und die angegebenen StreamingContext-Objekte verwendet werden.

NameBeschreibung
System_CAPS_protpropertycomparer

Veraltet. Ruft den für die IComparer zu verwendenden Hashtable ab oder legt diesen fest.

System_CAPS_pubpropertyCount

Ruft die Anzahl der Schlüssel-Wert-Paare im Hashtable ab.

System_CAPS_protpropertyEqualityComparer

Ruft den IEqualityComparer ab, der für die Hashtable verwendet werden soll.

System_CAPS_protpropertyhcp

Veraltet. Ruft das Objekt ab, das Hashcodes verteilen kann, oder legt dieses fest.

System_CAPS_pubpropertyIsFixedSize

Ruft einen Wert ab, der angibt, ob das Hashtable eine feste Größe aufweist.

System_CAPS_pubpropertyIsReadOnly

Ruft einen Wert ab, der angibt, ob das Hashtable schreibgeschützt ist.

System_CAPS_pubpropertyIsSynchronized

Ruft einen Wert ab, der angibt, ob der Zugriff auf die Hashtable synchronisiert (threadsicher) ist.

System_CAPS_pubpropertyItem[Object]

Ruft den Wert ab, der dem angegebenen Schlüssel zugeordnet ist, oder legt diesen fest.

System_CAPS_pubpropertyKeys

Ruft eine ICollection ab, die die Schlüssel in der Hashtable enthält.

System_CAPS_pubpropertySyncRoot

Ruft ein Objekt ab, mit dem der Zugriff auf Hashtable synchronisiert werden kann.

System_CAPS_pubpropertyValues

Ruft eine ICollection ab, die die Werte im Hashtable enthält.

NameBeschreibung
System_CAPS_pubmethodAdd(Object, Object)

Fügt dem Hashtable ein Element mit dem angegebenen Schlüssel und Wert hinzu.

System_CAPS_pubmethodClear()

Entfernt alle Elemente aus der Hashtable.

System_CAPS_pubmethodClone()

Erstellt eine flache Kopie von Hashtable.

System_CAPS_pubmethodContains(Object)

Stellt fest, ob der Hashtable einen bestimmten Schlüssel enthält.

System_CAPS_pubmethodContainsKey(Object)

Stellt fest, ob der Hashtable einen bestimmten Schlüssel enthält.

System_CAPS_pubmethodContainsValue(Object)

Ermittelt, ob die Hashtable einen bestimmten Wert enthält.

System_CAPS_pubmethodCopyTo(Array, Int32)

Kopiert die Hashtable-Elemente an den angegebenen Index in einer eindimensionalen Array-Instanz.

System_CAPS_pubmethodEquals(Object)

Bestimmt, ob das angegebene Objekt mit dem aktuellen Objekt identisch ist.(Geerbt von „Object“.)

System_CAPS_protmethodFinalize()

Gibt einem Objekt Gelegenheit, Ressourcen freizugeben und andere Bereinigungen durchzuführen, bevor es von der Garbage Collection freigegeben wird. (Geerbt von „Object“.)

System_CAPS_pubmethodGetEnumerator()

Gibt einen IDictionaryEnumerator zurück, der Hashtable durchläuft.

System_CAPS_protmethodGetHash(Object)

Gibt den Hashcode für den angegebenen Schlüssel zurück.

System_CAPS_pubmethodGetHashCode()

Fungiert als die Standardhashfunktion.(Geerbt von „Object“.)

System_CAPS_pubmethodGetObjectData(SerializationInfo, StreamingContext)

Implementiert die ISerializable-Schnittstelle und gibt die zum Serialisieren der Hashtable erforderlichen Daten zurück.

System_CAPS_pubmethodGetType()

Ruft den Type der aktuellen Instanz ab.(Geerbt von „Object“.)

System_CAPS_protmethodKeyEquals(Object, Object)

Vergleicht ein bestimmtes Object mit einem bestimmten Schlüssel in Hashtable.

System_CAPS_protmethodMemberwiseClone()

Erstellt eine flache Kopie des aktuellen Object.(Geerbt von „Object“.)

System_CAPS_pubmethodOnDeserialization(Object)

Implementiert die ISerializable-Schnittstelle und löst das Deserialisierungsereignis aus, sobald die Deserialisierung abgeschlossen ist.

System_CAPS_pubmethodRemove(Object)

Entfernt das Element mit dem angegebenen Schlüssel aus dem Hashtable.

System_CAPS_pubmethodSystem_CAPS_staticSynchronized(Hashtable)

Gibt einen synchronisierten (threadsicheren) Wrapper für die Hashtable zurück.

System_CAPS_pubmethodToString()

Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt.(Geerbt von „Object“.)

NameBeschreibung
System_CAPS_pubinterfaceSystem_CAPS_privmethodIEnumerable.GetEnumerator()

Gibt einen Enumerator zurück, der eine Auflistung durchläuft.

NameBeschreibung
System_CAPS_pubmethodAsParallel()

Überladen. Ermöglicht die Parallelisierung einer Abfrage.(Definiert durch ParallelEnumerable.)

System_CAPS_pubmethodAsQueryable()

Überladen. Konvertiert ein IEnumerable zu einer IQueryable.(Definiert durch Queryable.)

System_CAPS_pubmethodCast<TResult>()

Wandelt die Elemente einer IEnumerable in den angegebenen Typ.(Definiert durch Enumerable.)

System_CAPS_pubmethodOfType<TResult>()

Filtert die Elemente einer IEnumerable auf Grundlage eines angegebenen Typs.(Definiert durch Enumerable.)

System_CAPS_noteHinweis

Die .NET Framework-Quellcodes für diesen Typ finden Sie unter der Reference Source. Sie können den Quellcode online Durchsuchen, Referenz für die Offlineanzeige herunterladen und schrittweise durchlaufen (inklusive Patches und Updates) während des Debuggens; see instructions.

Jedes Element ist ein Schlüssel/Wert-Paar in gespeicherten ein DictionaryEntry Objekt. Ein Schlüssel kann nicht null, aber ein Wert sein kann.

Die Objekte, die als Schlüssel durch eine Hashtable sind erforderlich, um das Überschreiben der Object.GetHashCode Methode (oder die IHashCodeProvider Schnittstelle) und die Object.Equals Methode (oder die IComparer Schnittstelle). Die Implementierung von Methoden und Schnittstellen muss Groß-/Kleinschreibung die gleiche Weise behandeln. andernfalls die Hashtable möglicherweise nicht ordnungsgemäß verhält. Z. B. beim Erstellen einer Hashtable, verwenden Sie die CaseInsensitiveHashCodeProvider Klasse (oder alle Groß-/Kleinschreibung IHashCodeProvider Implementierung) mit der CaseInsensitiveComparer Klasse (oder alle Groß-/Kleinschreibung IComparer Implementierung).

Darüber hinaus müssen diese Methoden erzeugen die gleichen Ergebnisse, wenn Sie mit denselben Parametern aufgerufen wird, während der Schlüssel vorhanden ist die Hashtable. Eine Alternative ist die Verwendung einer Hashtable Konstruktor mit einem IEqualityComparer Parameter. Gleichheit der Schlüssel wäre einfach Verweisgleichheit, der geerbten Implementierung von Object.GetHashCode und Object.Equals ausreichen würde.

Schlüsselobjekte müssen unveränderlich sein, solange sie als Schlüssel verwendet werden die Hashtable.

Wenn ein Element hinzugefügt wird, um die Hashtable, das Element befindet sich in einem Bucket, basierend auf dem Hashcode des Schlüssels. Nachfolgende Suchen des Schlüssels verwenden den Hashcode des Schlüssels in nur einem bestimmten Bucket gesucht werden soll, wodurch die Anzahl der Schlüssel Vergleiche erforderlich, um nach einem Element Suchen erheblich reduziert.

Der Ladefaktor eine Hashtable bestimmt das maximale Verhältnis von Elementen zu Buckets. Kleinere laden Faktoren dazu führen, dass schneller Suchzeiten Speicherbedarf. Der Standardlastfaktor 1,0 bietet im Allgemeinen den besten Kompromiss zwischen Geschwindigkeit und Größe. Ein anderen Ladefaktor kann auch angegeben, wann die Hashtable wird erstellt.

Wenn Elemente hinzugefügt werden eine Hashtable, den tatsächlichen Ladefaktor der Hashtable erhöht. Wenn der tatsächliche Lastfaktor erreicht den angegebenen Lastfaktor sowie die Anzahl der Buckets in der Hashtable wird automatisch auf die kleinste Primzahl, die größer ist als zweimal die aktuelle Anzahl der erhöht Hashtable Buckets.

Jedes Schlüsselobjekt in der Hashtable müssen eine eigene Hashfunktion, die durch den Aufruf zugegriffen werden kann bereitstellen GetHash. Allerdings alle Objekte implementieren IHashCodeProvider übergeben werden kann, um eine Hashtable Konstruktor, und Hash-Funktion für alle Objekte in der Tabelle verwendet wird.

Die Kapazität einer Hashtable ist die Anzahl der Elemente der Hashtable aufnehmen kann. Wenn Elemente hinzugefügt werden eine Hashtable, die Kapazität wird automatisch erhöht, nach Bedarf über die neuzuordnung.

Für sehr große Hashtable Objekte aufweist, können Sie die maximale Kapazität auf 2 Milliarden Elemente auf einem 64-Bit-System erhöhen, indem die enabled Attribut des Konfigurationselements auf true in der Umgebung zur Laufzeit.

Die foreach -Anweisung der Programmiersprache c# (For Each in Visual Basic) ein Objekt des Typs der Elemente in der Auflistung zurück. Da jedes Element von der Hashtable ist ein Schlüssel/Wert-Paar der Elementtyp ist nicht der Typ des Schlüssels oder den Typ des Werts. Stattdessen der Elementtyp ist DictionaryEntry. Zum Beispiel:

foreach(DictionaryEntry de in myHashtable)
{
    // ...
}

Die foreach Anweisung ist ein Wrapper um den Enumerator, der nur das Lesen aus nicht das Schreiben auf die Auflistung zulässt.

Da das Serialisieren und Deserialisieren einen Enumerator für eine Hashtable kann dazu führen, dass die Elemente, die neu angeordnet werden, es ist nicht möglich, Enumeration ohne Aufruf zu fortfahren die Reset Methode.

System_CAPS_noteHinweis

Da Schlüssel geerbt werden können, und ihr Verhalten geändert, deren absolute Eindeutigkeit vom nicht sichergestellt werden Vergleiche mit der Equals Methode.

Im folgende Beispiel wird gezeigt, wie zum Erstellen, initialisieren und führen verschiedene Funktionen auf einem Hashtable und zum Drucken von seiner Schlüssel und Werte.

using System;
using System.Collections;

class Example
{
    public static void Main()
    {
        // Create a new hash table.
        //
        Hashtable openWith = new Hashtable();

        // Add some elements to the hash table. There are no 
        // duplicate keys, but some of the values are duplicates.
        openWith.Add("txt", "notepad.exe");
        openWith.Add("bmp", "paint.exe");
        openWith.Add("dib", "paint.exe");
        openWith.Add("rtf", "wordpad.exe");

        // The Add method throws an exception if the new key is 
        // already in the hash table.
        try
        {
            openWith.Add("txt", "winword.exe");
        }
        catch
        {
            Console.WriteLine("An element with Key = \"txt\" already exists.");
        }

        // The Item property is the default property, so you 
        // can omit its name when accessing elements. 
        Console.WriteLine("For key = \"rtf\", value = {0}.", openWith["rtf"]);

        // The default Item property can be used to change the value
        // associated with a key.
        openWith["rtf"] = "winword.exe";
        Console.WriteLine("For key = \"rtf\", value = {0}.", openWith["rtf"]);

        // If a key does not exist, setting the default Item property
        // for that key adds a new key/value pair.
        openWith["doc"] = "winword.exe";

        // ContainsKey can be used to test keys before inserting 
        // them.
        if (!openWith.ContainsKey("ht"))
        {
            openWith.Add("ht", "hypertrm.exe");
            Console.WriteLine("Value added for key = \"ht\": {0}", openWith["ht"]);
        }

        // When you use foreach to enumerate hash table elements,
        // the elements are retrieved as KeyValuePair objects.
        Console.WriteLine();
        foreach( DictionaryEntry de in openWith )
        {
            Console.WriteLine("Key = {0}, Value = {1}", de.Key, de.Value);
        }

        // To get the values alone, use the Values property.
        ICollection valueColl = openWith.Values;

        // The elements of the ValueCollection are strongly typed
        // with the type that was specified for hash table values.
        Console.WriteLine();
        foreach( string s in valueColl )
        {
            Console.WriteLine("Value = {0}", s);
        }

        // To get the keys alone, use the Keys property.
        ICollection keyColl = openWith.Keys;

        // The elements of the KeyCollection are strongly typed
        // with the type that was specified for hash table keys.
        Console.WriteLine();
        foreach( string s in keyColl )
        {
            Console.WriteLine("Key = {0}", s);
        }

        // Use the Remove method to remove a key/value pair.
        Console.WriteLine("\nRemove(\"doc\")");
        openWith.Remove("doc");

        if (!openWith.ContainsKey("doc"))
        {
            Console.WriteLine("Key \"doc\" is not found.");
        }
    }
}

/* This code example produces the following output:

An element with Key = "txt" already exists.
For key = "rtf", value = wordpad.exe.
For key = "rtf", value = winword.exe.
Value added for key = "ht": hypertrm.exe

Key = dib, Value = paint.exe
Key = txt, Value = notepad.exe
Key = ht, Value = hypertrm.exe
Key = bmp, Value = paint.exe
Key = rtf, Value = winword.exe
Key = doc, Value = winword.exe

Value = paint.exe
Value = notepad.exe
Value = hypertrm.exe
Value = paint.exe
Value = winword.exe
Value = winword.exe

Key = dib
Key = txt
Key = ht
Key = bmp
Key = rtf
Key = doc

Remove("doc")
Key "doc" is not found.
 */

Universelle Windows-Plattform
Verfügbar seit 10
.NET Framework
Verfügbar seit 1.1

Hashtableist threadsicher, für die Verwendung durch mehrere Readerthreads und einen einzelnen Schreibthread threadsicher. Es ist threadsicher für Multi-Thread verwenden, wenn nur einer der Threads ausführen Schreibvorgänge (Update), die sperrenfreie Lesevorgänge gewährt, vorausgesetzt, dass der Writer serialisiert werden die Hashtable. Um mehrere Writer auf alle Vorgänge unterstützen die Hashtable muss über den Wrapper zurückgegebene erfolgen die Synchronized -Methode, vorausgesetzt, es sind keine Threads, die beim Lesen der Hashtable Objekt.

Einer Auflistung ist systemintern keine threadsichere Prozedur. Selbst wenn eine Auflistung synchronisiert wird, besteht die Möglichkeit, dass andere Threads sie ändern. Dies führt dazu, dass der Enumerator eine Ausnahme auslöst. Um während der Enumeration Threadsicherheit zu gewährleisten, können Sie entweder die Auflistung während der gesamten Enumeration sperren oder die Ausnahmen, die aus von anderen Threads stammenden Änderungen resultieren, abfangen.

Zurück zum Anfang
Anzeigen: