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-Konstruktor: (Int32, IHashCodeProvider, IComparer)

 

Veröffentlicht: Oktober 2016

Hinweis: Diese API ist jetzt veraltet.

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

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

[ObsoleteAttribute("Please use Hashtable(int, IEqualityComparer) instead.")]
public Hashtable(
	int capacity,
	IHashCodeProvider hcp,
	IComparer comparer
)

Parameter

capacity
Type: System.Int32

Die ungefähre Anzahl von Elementen, die die Hashtable anfänglich enthalten kann.

hcp
Type: System.Collections.IHashCodeProvider

Das IHashCodeProvider-Objekt, das die Hashcodes für alle Schlüssel in der Hashtable bereitstellt.

- oder -

null, wenn der Hashcode-Standardanbieter verwendet werden soll. Dies ist die jeweilige Object.GetHashCode-Implementierung eines Schlüssels.

comparer
Type: System.Collections.IComparer

Das IComparer-Objekt, mit dem ermittelt wird, ob zwei Schlüssel gleich sind.

- oder -

null, wenn der Standardcomparer verwendet werden soll. Dies ist die jeweilige Object.Equals-Implementierung eines Schlüssels.

Exception Condition
ArgumentOutOfRangeException

capacity ist kleiner als Null.

Angeben der anfänglichen Kapazität entfällt die Notwendigkeit, eine Reihe von größenänderungsvorgänge beim Hinzufügen von Elementen zum Ausführen der Hashtable Objekt. Kapazität wird automatisch nach Bedarf erhöht werden basierend auf den Lastfaktor.

Der Lastfaktor ist das maximale Verhältnis von Elementen zu Buckets. Ein kleinerer Lastfaktor bedeutet schnellere Suche bei höherem Speicherbedarf.

Wenn der tatsächliche Lastfaktor den angegebenen Lastfaktor erreicht, wird die Anzahl der Buckets automatisch auf die kleinste Primzahl erhöht, die größer ist als zweimal die aktuelle Anzahl der Buckets.

Der Hashcodeanbieter verteilt Hashcodes für Schlüssel in der Hashtable. Der Hashcode-Standardanbieter ist die Implementierung von den Schlüssel Object.GetHashCode.

Der Vergleich wird bestimmt, ob zwei Schlüssel gleich sind. Jeder Schlüssel in einer Hashtable muss eindeutig sein. Der Standardcomparer ist die Implementierung von den Schlüssel Object.Equals.

Benutzerdefinierte Hashcodeanbieter und Comparer ermöglichen Szenarien wie z. B. Suchvorgänge mit Groß-und Kleinschreibung Zeichenfolgen durchführen.

Dieser Konstruktor ist eine O (n)-Vorgang, in dem n ist der capacity Parameter.

Im folgenden Codebeispiel werden Hashtabellen mit verschiedenen erstellt Hashtable Konstruktoren und zeigt die Unterschiede im Verhalten der Hashtabellen, selbst wenn jeweils dieselben Elemente enthalten.

using System;
using System.Collections;
using System.Globalization;

class myCultureComparer : IEqualityComparer
{
    public CaseInsensitiveComparer myComparer;

    public myCultureComparer()
    {
        myComparer = CaseInsensitiveComparer.DefaultInvariant;
    }

    public myCultureComparer(CultureInfo myCulture)
    {
        myComparer = new CaseInsensitiveComparer(myCulture);
    }

    public new bool Equals(object x, object y)
    {
        if (myComparer.Compare(x, y) == 0)
        {
            return true;
        }
        else
        {
            return false;
        }
    }

    public int GetHashCode(object obj)
    {
        // Compare the hash code for the lowercase versions of the strings.
        return obj.ToString().ToLower().GetHashCode();
    }
}

public class SamplesHashtable
{

    public static void Main()
    {

        // Create a hash table using the default comparer.
        Hashtable myHT1 = new Hashtable(3);
        myHT1.Add("FIRST", "Hello");
        myHT1.Add("SECOND", "World");
        myHT1.Add("THIRD", "!");

        // Create a hash table using the specified IEqualityComparer that uses
        // the CaseInsensitiveComparer.DefaultInvariant to determine equality.
        Hashtable myHT2 = new Hashtable(3, new myCultureComparer());
        myHT2.Add("FIRST", "Hello");
        myHT2.Add("SECOND", "World");
        myHT2.Add("THIRD", "!");

        // Create a hash table using an IEqualityComparer that is based on
        // the Turkish culture (tr-TR) where "I" is not the uppercase
        // version of "i".
        CultureInfo myCul = new CultureInfo("tr-TR");
        Hashtable myHT3 = new Hashtable(3, new myCultureComparer(myCul));
        myHT3.Add("FIRST", "Hello");
        myHT3.Add("SECOND", "World");
        myHT3.Add("THIRD", "!");

        // Search for a key in each hash table.
        Console.WriteLine("first is in myHT1: {0}", myHT1.ContainsKey("first"));
        Console.WriteLine("first is in myHT2: {0}", myHT2.ContainsKey("first"));
        Console.WriteLine("first is in myHT3: {0}", myHT3.ContainsKey("first"));

    }

}


/* 
This code produces the following output.
Results vary depending on the system's culture settings.

first is in myHT1: False
first is in myHT2: True
first is in myHT3: False

*/

.NET Framework
Verfügbar seit 1.1
Zurück zum Anfang
Anzeigen: