Hashtable Konstruktorer

Definition

Initierar en ny instans av Hashtable klassen.

Överlagringar

Name Description
Hashtable()

Initierar en ny, tom instans av Hashtable klassen med standardinitieringskapaciteten, inläsningsfaktorn, hash-kodprovidern och jämförelsen.

Hashtable(Int32, Single, IHashCodeProvider, IComparer)
Föråldrad.

Initierar en ny, tom instans av Hashtable klassen med den angivna initiala kapaciteten, inläsningsfaktorn, hash-kodprovidern och jämförelsen.

Hashtable(IDictionary, Single, IHashCodeProvider, IComparer)
Föråldrad.

Initierar en ny instans av Hashtable klassen genom att kopiera elementen från den angivna ordlistan till det nya Hashtable objektet. Det nya Hashtable objektet har en initial kapacitet som är lika med antalet element som kopieras och använder den angivna inläsningsfaktorn, hash-kodprovidern och jämförelsen.

Hashtable(Int32, Single, IEqualityComparer)

Initierar en ny, tom instans av Hashtable klassen med den angivna initiala kapaciteten, inläsningsfaktorn och IEqualityComparer objektet.

Hashtable(Int32, IHashCodeProvider, IComparer)
Föråldrad.

Initierar en ny, tom instans av Hashtable klassen med den angivna initiala kapaciteten, hash-kodprovidern, jämförelsen och standardinläsningsfaktorn.

Hashtable(IDictionary, Single, IEqualityComparer)

Initierar en ny instans av Hashtable klassen genom att kopiera elementen från den angivna ordlistan till det nya Hashtable objektet. Det nya Hashtable objektet har en initial kapacitet som är lika med antalet element som kopieras och använder den angivna inläsningsfaktorn och IEqualityComparer objektet.

Hashtable(IDictionary, IHashCodeProvider, IComparer)
Föråldrad.

Initierar en ny instans av Hashtable klassen genom att kopiera elementen från den angivna ordlistan till det nya Hashtable objektet. Det nya Hashtable objektet har en initial kapacitet som är lika med antalet element som kopieras och använder standardbelastningsfaktorn och den angivna hash-kodprovidern och jämförelsen. Det här API:et är föråldrat. Ett alternativ finns i Hashtable(IDictionary, IEqualityComparer).

Hashtable(Int32, Single)

Initierar en ny, tom instans av Hashtable klassen med den angivna initiala kapacitets- och inläsningsfaktorn samt standard-hash-kodprovidern och jämförelsen.

Hashtable(SerializationInfo, StreamingContext)

Initierar en ny, tom instans av klassen som kan serialiseras med hjälp av Hashtable angivna SerializationInfo objekt och StreamingContext objekt.

Hashtable(IHashCodeProvider, IComparer)
Föråldrad.

Initierar en ny, tom instans av Hashtable klassen med standardfaktorn för initial kapacitet och inläsning, samt den angivna hash-kodprovidern och jämförelsen.

Hashtable(IDictionary, Single)

Initierar en ny instans av Hashtable klassen genom att kopiera elementen från den angivna ordlistan till det nya Hashtable objektet. Det nya Hashtable objektet har en initial kapacitet som är lika med antalet kopierade element och använder den angivna inläsningsfaktorn samt standard-hash-kodprovidern och jämförelsen.

Hashtable(IDictionary, IEqualityComparer)

Initierar en ny instans av Hashtable klassen genom att kopiera elementen från den angivna ordlistan till ett nytt Hashtable objekt. Det nya Hashtable objektet har en initial kapacitet som är lika med antalet element som kopieras och använder standardbelastningsfaktorn och det angivna IEqualityComparer objektet.

Hashtable(Int32)

Initierar en ny, tom instans av Hashtable klassen med den angivna initiala kapaciteten och standardbelastningsfaktorn, hash-kodprovidern och jämförelsen.

Hashtable(IEqualityComparer)

Initierar en ny, tom instans av Hashtable klassen med standardfaktorn för initial kapacitet och inläsning och det angivna IEqualityComparer objektet.

Hashtable(IDictionary)

Initierar en ny instans av Hashtable klassen genom att kopiera elementen från den angivna ordlistan till det nya Hashtable objektet. Det nya Hashtable objektet har en initial kapacitet som är lika med antalet element som kopieras och använder standardbelastningsfaktorn, hash-kodprovidern och jämförelsen.

Hashtable(Int32, IEqualityComparer)

Initierar en ny, tom instans av Hashtable klassen med den angivna initiala kapaciteten och IEqualityComparer, och standardbelastningsfaktorn.

Hashtable()

Initierar en ny, tom instans av Hashtable klassen med standardinitieringskapaciteten, inläsningsfaktorn, hash-kodprovidern och jämförelsen.

public:
 Hashtable();
public Hashtable();
Public Sub New ()

Exempel

Följande kodexempel skapar hash-tabeller med olika Hashtable konstruktorer och visar skillnaderna i beteendet för hash-tabellerna, även om var och en innehåller samma element.

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

class myComparer : IEqualityComparer
{
    public new bool Equals(object x, object y)
    {
        return x.Equals(y);
    }

    public int GetHashCode(object obj)
    {
        return obj.ToString().ToLower().GetHashCode();
    }
}

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)
    {
        return myComparer.Compare(x, y) == 0;
    }

    public int GetHashCode(object obj)
    {
        return obj.ToString().ToLower().GetHashCode();
    }
}

public class SamplesHashtable
{

    public static void Main()
    {

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

        // Create a hash table using the specified IEqualityComparer that uses
        // the default Object.Equals to determine equality.
        var myHT2 = new Hashtable(new myComparer());
        myHT2.Add("FIRST", "Hello");
        myHT2.Add("SECOND", "World");
        myHT2.Add("THIRD", "!");

        // Create a hash table using a case-insensitive hash code provider and
        // case-insensitive comparer based on the InvariantCulture.
        Hashtable myHT3 = new Hashtable(
            CaseInsensitiveHashCodeProvider.DefaultInvariant,
            CaseInsensitiveComparer.DefaultInvariant);
        myHT3.Add("FIRST", "Hello");
        myHT3.Add("SECOND", "World");
        myHT3.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".
        var myCul = new CultureInfo("tr-TR");
        var myHT4 = new Hashtable(new myCultureComparer(myCul));
        myHT4.Add("FIRST", "Hello");
        myHT4.Add("SECOND", "World");
        myHT4.Add("THIRD", "!");

        // Search for a key in each hash table.
        Console.WriteLine($"first is in myHT1: {myHT1.ContainsKey("first")}");
        Console.WriteLine($"first is in myHT2: {myHT2.ContainsKey("first")}");
        Console.WriteLine($"first is in myHT3: {myHT3.ContainsKey("first")}");
        Console.WriteLine($"first is in myHT4: {myHT4.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: False
first is in myHT3: True
first is in myHT4: False

*/
Imports System.Collections
Imports System.Globalization

Public Class myComparer
    Implements IEqualityComparer
    Public Function Equals1(ByVal x As Object, ByVal y As Object) _
        As Boolean Implements IEqualityComparer.Equals

        Return x.Equals(y)
    End Function

    Public Function GetHashCode1(ByVal obj As Object) _
        As Integer Implements IEqualityComparer.GetHashCode

        Return obj.ToString().ToLower().GetHashCode()
    End Function

End Class

Public Class myCultureComparer
    Implements IEqualityComparer

    Dim myComparer As CaseInsensitiveComparer

    Public Sub New()
        myComparer = CaseInsensitiveComparer.DefaultInvariant
    End Sub

    Public Sub New(ByVal myCulture As CultureInfo)
        myComparer = New CaseInsensitiveComparer(myCulture)
    End Sub

    Public Function Equals1(ByVal x As Object, ByVal y As Object) _
        As Boolean Implements IEqualityComparer.Equals

        Return myComparer.Compare(x, y) = 0
    End Function

    Public Function GetHashCode1(ByVal obj As Object) _
        As Integer Implements IEqualityComparer.GetHashCode
        Return obj.ToString().ToLower().GetHashCode()
    End Function
End Class

Public Class SamplesHashtable

    Public Shared Sub Main()

        ' Create a hash table using the default comparer.
        Dim myHT1 As New Hashtable()
        myHT1.Add("FIRST", "Hello")
        myHT1.Add("SECOND", "World")
        myHT1.Add("THIRD", "!")

        ' Create a hash table using the specified IEqualityComparer that uses
        ' the default Object.Equals to determine equality.
        Dim myHT2 As New Hashtable(New myComparer())
        myHT2.Add("FIRST", "Hello")
        myHT2.Add("SECOND", "World")
        myHT2.Add("THIRD", "!")

        ' Create a hash table using a case-insensitive hash code provider and
        ' case-insensitive comparer based on the InvariantCulture.
        Dim myHT3 As New Hashtable( _
            CaseInsensitiveHashCodeProvider.DefaultInvariant, _
            CaseInsensitiveComparer.DefaultInvariant)
        myHT3.Add("FIRST", "Hello")
        myHT3.Add("SECOND", "World")
        myHT3.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".
        Dim myCul As New CultureInfo("tr-TR")
        Dim myHT4 As New Hashtable(New myCultureComparer(myCul))
        myHT4.Add("FIRST", "Hello")
        myHT4.Add("SECOND", "World")
        myHT4.Add("THIRD", "!")

        ' Search for a key in each hash table.
        Console.WriteLine($"first is in myHT1: {myHT1.ContainsKey("first")}")
        Console.WriteLine($"first is in myHT2: {myHT2.ContainsKey("first")}")
        Console.WriteLine($"first is in myHT3: {myHT3.ContainsKey("first")}")
        Console.WriteLine($"first is in myHT4: {myHT4.ContainsKey("first")}")

    End Sub

End Class

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

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

Kommentarer

En hash-tabells kapacitet används för att beräkna det optimala antalet hash-tabell bucketar baserat på belastningsfaktorn. Kapaciteten ökas automatiskt efter behov.

Belastningsfaktorn är det maximala förhållandet mellan element och bucketar. En mindre belastningsfaktor innebär snabbare uppslag på kostnaden för ökad minnesförbrukning.

När den faktiska belastningsfaktorn når den angivna belastningsfaktorn ökas antalet bucketar automatiskt till det minsta primtal som är större än dubbelt så många bucketar som det aktuella antalet.

Hash-kodprovidern delar ut hash-koder för nycklar i Hashtable objektet. Standard-hash-kodprovidern är nyckelns implementering av Object.GetHashCode.

Jämförelsen avgör om två nycklar är lika med. Varje nyckel i en Hashtable måste vara unik. Standardjäxaren är nyckelns implementering av Object.Equals.

Den här konstruktorn är en O(1) åtgärd.

Se även

Gäller för

Hashtable(Int32, Single, IHashCodeProvider, IComparer)

Varning

Please use Hashtable(int, float, IEqualityComparer) instead.

Initierar en ny, tom instans av Hashtable klassen med den angivna initiala kapaciteten, inläsningsfaktorn, hash-kodprovidern och jämförelsen.

public:
 Hashtable(int capacity, float loadFactor, System::Collections::IHashCodeProvider ^ hcp, System::Collections::IComparer ^ comparer);
public Hashtable(int capacity, float loadFactor, System.Collections.IHashCodeProvider hcp, System.Collections.IComparer comparer);
[System.Obsolete("Please use Hashtable(int, float, IEqualityComparer) instead.")]
public Hashtable(int capacity, float loadFactor, System.Collections.IHashCodeProvider hcp, System.Collections.IComparer comparer);
new System.Collections.Hashtable : int * single * System.Collections.IHashCodeProvider * System.Collections.IComparer -> System.Collections.Hashtable
[<System.Obsolete("Please use Hashtable(int, float, IEqualityComparer) instead.")>]
new System.Collections.Hashtable : int * single * System.Collections.IHashCodeProvider * System.Collections.IComparer -> System.Collections.Hashtable
Public Sub New (capacity As Integer, loadFactor As Single, hcp As IHashCodeProvider, comparer As IComparer)

Parametrar

capacity
Int32

Det ungefärliga antalet element som Hashtable objektet kan innehålla från början.

loadFactor
Single

Ett tal i intervallet från 0,1 till 1,0 som multipliceras med standardvärdet som ger bästa prestanda. Resultatet är det maximala förhållandet mellan element och bucketar.

hcp
IHashCodeProvider

Objektet IHashCodeProvider som tillhandahåller hash-koderna för alla nycklar i Hashtable.

-eller-

null för att använda standard-hash-kodprovidern, som är varje nyckels implementering av GetHashCode().

comparer
IComparer

Det IComparer objekt som ska användas för att avgöra om två nycklar är lika med.

-eller-

null för att använda standardjäxaren, som är varje nyckels implementering av Equals(Object).

Attribut

Undantag

capacity är mindre än noll.

-eller-

loadFactor är mindre än 0,1.

-eller-

loadFactor är större än 1,0.

Kommentarer

Om du anger den initiala kapaciteten eliminerar du behovet av att utföra ett antal storleksändringsåtgärder när element läggs till i Hashtable objektet. Kapaciteten ökas automatiskt efter behov baserat på belastningsfaktorn.

Belastningsfaktorn är det maximala förhållandet mellan element och bucketar. En mindre belastningsfaktor innebär snabbare uppslag på kostnaden för ökad minnesförbrukning. En belastningsfaktor på 1,0 är den bästa balansen mellan hastighet och storlek.

När den faktiska belastningsfaktorn når den angivna belastningsfaktorn ökas antalet bucketar automatiskt till det minsta primtal som är större än dubbelt så många bucketar som det aktuella antalet.

Hash-kodprovidern delar ut hash-koder för nycklar i Hashtable. Standard-hash-kodprovidern är nyckelns implementering av Object.GetHashCode.

Jämförelsen avgör om två nycklar är lika med. Varje nyckel i en Hashtable måste vara unik. Standardjäxaren är nyckelns implementering av Object.Equals.

Den anpassade hash-kodprovidern och den anpassade jämförelsen aktiverar scenarier som att göra sökningar med skiftlägesokänsliga strängar.

Den här konstruktorn är en O(n) åtgärd, där n är parametern capacity .

Se även

Gäller för

Hashtable(IDictionary, Single, IHashCodeProvider, IComparer)

Varning

Please use Hashtable(IDictionary, float, IEqualityComparer) instead.

Initierar en ny instans av Hashtable klassen genom att kopiera elementen från den angivna ordlistan till det nya Hashtable objektet. Det nya Hashtable objektet har en initial kapacitet som är lika med antalet element som kopieras och använder den angivna inläsningsfaktorn, hash-kodprovidern och jämförelsen.

public:
 Hashtable(System::Collections::IDictionary ^ d, float loadFactor, System::Collections::IHashCodeProvider ^ hcp, System::Collections::IComparer ^ comparer);
public Hashtable(System.Collections.IDictionary d, float loadFactor, System.Collections.IHashCodeProvider hcp, System.Collections.IComparer comparer);
[System.Obsolete("Please use Hashtable(IDictionary, float, IEqualityComparer) instead.")]
public Hashtable(System.Collections.IDictionary d, float loadFactor, System.Collections.IHashCodeProvider hcp, System.Collections.IComparer comparer);
new System.Collections.Hashtable : System.Collections.IDictionary * single * System.Collections.IHashCodeProvider * System.Collections.IComparer -> System.Collections.Hashtable
[<System.Obsolete("Please use Hashtable(IDictionary, float, IEqualityComparer) instead.")>]
new System.Collections.Hashtable : System.Collections.IDictionary * single * System.Collections.IHashCodeProvider * System.Collections.IComparer -> System.Collections.Hashtable
Public Sub New (d As IDictionary, loadFactor As Single, hcp As IHashCodeProvider, comparer As IComparer)

Parametrar

d
IDictionary

Objektet som IDictionary ska kopieras till ett nytt Hashtable objekt.

loadFactor
Single

Ett tal i intervallet från 0,1 till 1,0 som multipliceras med standardvärdet som ger bästa prestanda. Resultatet är det maximala förhållandet mellan element och bucketar.

hcp
IHashCodeProvider

Objektet IHashCodeProvider som tillhandahåller hash-koderna för alla nycklar i Hashtable.

-eller-

null för att använda standard-hash-kodprovidern, som är varje nyckels implementering av GetHashCode().

comparer
IComparer

Det IComparer objekt som ska användas för att avgöra om två nycklar är lika med.

-eller-

null för att använda standardjäxaren, som är varje nyckels implementering av Equals(Object).

Attribut

Undantag

d är null.

loadFactor är mindre än 0,1.

-eller-

loadFactor är större än 1,0.

Kommentarer

Den initiala kapaciteten är inställd på antalet element i källordlistan. Kapaciteten ökas automatiskt efter behov baserat på belastningsfaktorn.

Belastningsfaktorn är det maximala förhållandet mellan element och bucketar. En mindre belastningsfaktor innebär snabbare uppslag på kostnaden för ökad minnesförbrukning. En belastningsfaktor på 1,0 är den bästa balansen mellan hastighet och storlek.

När den faktiska belastningsfaktorn når den angivna belastningsfaktorn ökas antalet bucketar automatiskt till det minsta primtal som är större än dubbelt så många bucketar som det aktuella antalet.

Hash-kodprovidern delar ut hash-koder för nycklar i Hashtable objektet. Standard-hash-kodprovidern är nyckelns implementering av Object.GetHashCode.

Jämförelsen avgör om två nycklar är lika med. Varje nyckel i en Hashtable måste vara unik. Standardjäxaren är nyckelns implementering av Object.Equals.

Den anpassade hash-kodprovidern och den anpassade jämförelsen aktiverar scenarier som att göra sökningar med skiftlägesokänsliga strängar.

Elementen i den nya Hashtable sorteras i samma ordning som uppräknaren itererar genom objektet IDictionary .

Den här konstruktorn är en O(n) åtgärd, där n är antalet element i parametern d .

Gäller för

Hashtable(Int32, Single, IEqualityComparer)

Initierar en ny, tom instans av Hashtable klassen med den angivna initiala kapaciteten, inläsningsfaktorn och IEqualityComparer objektet.

public:
 Hashtable(int capacity, float loadFactor, System::Collections::IEqualityComparer ^ equalityComparer);
public Hashtable(int capacity, float loadFactor, System.Collections.IEqualityComparer equalityComparer);
new System.Collections.Hashtable : int * single * System.Collections.IEqualityComparer -> System.Collections.Hashtable
Public Sub New (capacity As Integer, loadFactor As Single, equalityComparer As IEqualityComparer)

Parametrar

capacity
Int32

Det ungefärliga antalet element som Hashtable objektet kan innehålla från början.

loadFactor
Single

Ett tal i intervallet från 0,1 till 1,0 som multipliceras med standardvärdet som ger bästa prestanda. Resultatet är det maximala förhållandet mellan element och bucketar.

equalityComparer
IEqualityComparer

Objektet IEqualityComparer som definierar hash-kodprovidern och jämförelsen som ska användas med Hashtable.

-eller-

null för att använda standard-hash-kodprovidern och standardjäxaren. Standard-hash-kodprovidern är varje nyckels implementering av GetHashCode() och standardjäxaren är varje nyckels implementering av Equals(Object).

Undantag

capacity är mindre än noll.

-eller-

loadFactor är mindre än 0,1.

-eller-

loadFactor är större än 1,0.

Exempel

Följande kodexempel skapar hash-tabeller med olika Hashtable konstruktorer och visar skillnaderna i beteendet för hash-tabellerna, även om var och en innehåller samma element.

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, .8f);
        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, .8f, 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, .8f, 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

*/
Imports System.Collections
Imports System.Globalization

Public Class myCultureComparer
    Implements IEqualityComparer

    Dim myComparer As CaseInsensitiveComparer

    Public Sub New()
        myComparer = CaseInsensitiveComparer.DefaultInvariant
    End Sub

    Public Sub New(ByVal myCulture As CultureInfo)
        myComparer = New CaseInsensitiveComparer(myCulture)
    End Sub

    Public Function Equals1(ByVal x As Object, ByVal y As Object) _
        As Boolean Implements IEqualityComparer.Equals

        If (myComparer.Compare(x, y) = 0) Then
            Return True
        Else
            Return False
        End If
    End Function

    Public Function GetHashCode1(ByVal obj As Object) _
        As Integer Implements IEqualityComparer.GetHashCode
        Return obj.ToString().ToLower().GetHashCode()
    End Function
End Class

Public Class SamplesHashtable

    Public Shared Sub Main()

        ' Create a hash table using the default comparer.
        Dim myHT1 As New Hashtable(3, System.Convert.ToSingle(0.8))
        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.
        Dim myHT2 As New Hashtable(3, System.Convert.ToSingle(0.8), _
            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".
        Dim myCul As New CultureInfo("tr-TR")
        Dim myHT3 As New Hashtable(3, System.Convert.ToSingle(0.8), _
            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"))

    End Sub

End Class


'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

Kommentarer

Om du anger den initiala kapaciteten eliminerar du behovet av att utföra ett antal storleksändringsåtgärder när element läggs till i Hashtable objektet. Kapaciteten ökas automatiskt efter behov baserat på belastningsfaktorn.

Belastningsfaktorn är det maximala förhållandet mellan element och bucketar. En mindre belastningsfaktor innebär snabbare uppslag på kostnaden för ökad minnesförbrukning. En belastningsfaktor på 1,0 är den bästa balansen mellan hastighet och storlek.

När den faktiska belastningsfaktorn når den angivna belastningsfaktorn ökas antalet bucketar automatiskt till det minsta primtal som är större än dubbelt så många bucketar som det aktuella antalet.

Objektet IEqualityComparer innehåller både hash-kodprovidern och jämförelsen. Om en IEqualityComparer används i Hashtable konstruktorn krävs Object.GetHashCode inte de objekt som används som nycklar i Hashtable metoderna ochObject.Equals.

Hash-kodprovidern delar ut hash-koder för nycklar i Hashtable. Standard-hash-kodprovidern är nyckelns implementering av Object.GetHashCode.

Jämförelsen avgör om två nycklar är lika med. Varje nyckel i en Hashtable måste vara unik. Standardjäxaren är nyckelns implementering av Object.Equals.

Möjliggör IEqualityComparer scenarier som att göra sökningar med skiftlägesokänsliga strängar.

Den här konstruktorn är en O(n) åtgärd, där n är parametern capacity .

Se även

Gäller för

Hashtable(Int32, IHashCodeProvider, IComparer)

Varning

Please use Hashtable(int, IEqualityComparer) instead.

Initierar en ny, tom instans av Hashtable klassen med den angivna initiala kapaciteten, hash-kodprovidern, jämförelsen och standardinläsningsfaktorn.

public:
 Hashtable(int capacity, System::Collections::IHashCodeProvider ^ hcp, System::Collections::IComparer ^ comparer);
public Hashtable(int capacity, System.Collections.IHashCodeProvider hcp, System.Collections.IComparer comparer);
[System.Obsolete("Please use Hashtable(int, IEqualityComparer) instead.")]
public Hashtable(int capacity, System.Collections.IHashCodeProvider hcp, System.Collections.IComparer comparer);
new System.Collections.Hashtable : int * System.Collections.IHashCodeProvider * System.Collections.IComparer -> System.Collections.Hashtable
[<System.Obsolete("Please use Hashtable(int, IEqualityComparer) instead.")>]
new System.Collections.Hashtable : int * System.Collections.IHashCodeProvider * System.Collections.IComparer -> System.Collections.Hashtable
Public Sub New (capacity As Integer, hcp As IHashCodeProvider, comparer As IComparer)

Parametrar

capacity
Int32

Det ungefärliga antalet element som Hashtable objektet kan innehålla från början.

hcp
IHashCodeProvider

Objektet IHashCodeProvider som tillhandahåller hash-koderna för alla nycklar i Hashtable.

-eller-

null för att använda standard-hash-kodprovidern, som är varje nyckels implementering av GetHashCode().

comparer
IComparer

Det IComparer objekt som ska användas för att avgöra om två nycklar är lika med.

-eller-

null för att använda standardjäxaren, som är varje nyckels implementering av Equals(Object).

Attribut

Undantag

capacity är mindre än noll.

Kommentarer

Om du anger den initiala kapaciteten eliminerar du behovet av att utföra ett antal storleksändringsåtgärder när element läggs till i Hashtable objektet. Kapaciteten ökas automatiskt efter behov baserat på belastningsfaktorn.

Belastningsfaktorn är det maximala förhållandet mellan element och bucketar. En mindre belastningsfaktor innebär snabbare uppslag på kostnaden för ökad minnesförbrukning.

När den faktiska belastningsfaktorn når den angivna belastningsfaktorn ökas antalet bucketar automatiskt till det minsta primtal som är större än dubbelt så många bucketar som det aktuella antalet.

Hash-kodprovidern delar ut hash-koder för nycklar i Hashtable. Standard-hash-kodprovidern är nyckelns implementering av Object.GetHashCode.

Jämförelsen avgör om två nycklar är lika med. Varje nyckel i en Hashtable måste vara unik. Standardjäxaren är nyckelns implementering av Object.Equals.

Den anpassade hash-kodprovidern och den anpassade jämförelsen aktiverar scenarier som att göra sökningar med skiftlägesokänsliga strängar.

Den här konstruktorn är en O(n) åtgärd, där n är parametern capacity .

Se även

Gäller för

Hashtable(IDictionary, Single, IEqualityComparer)

Initierar en ny instans av Hashtable klassen genom att kopiera elementen från den angivna ordlistan till det nya Hashtable objektet. Det nya Hashtable objektet har en initial kapacitet som är lika med antalet element som kopieras och använder den angivna inläsningsfaktorn och IEqualityComparer objektet.

public:
 Hashtable(System::Collections::IDictionary ^ d, float loadFactor, System::Collections::IEqualityComparer ^ equalityComparer);
public Hashtable(System.Collections.IDictionary d, float loadFactor, System.Collections.IEqualityComparer equalityComparer);
new System.Collections.Hashtable : System.Collections.IDictionary * single * System.Collections.IEqualityComparer -> System.Collections.Hashtable
Public Sub New (d As IDictionary, loadFactor As Single, equalityComparer As IEqualityComparer)

Parametrar

d
IDictionary

Objektet som IDictionary ska kopieras till ett nytt Hashtable objekt.

loadFactor
Single

Ett tal i intervallet från 0,1 till 1,0 som multipliceras med standardvärdet som ger bästa prestanda. Resultatet är det maximala förhållandet mellan element och bucketar.

equalityComparer
IEqualityComparer

Objektet IEqualityComparer som definierar hash-kodprovidern och jämförelsen som ska användas med Hashtable.

-eller-

null för att använda standard-hash-kodprovidern och standardjäxaren. Standard-hash-kodprovidern är varje nyckels implementering av GetHashCode() och standardjäxaren är varje nyckels implementering av Equals(Object).

Undantag

d är null.

loadFactor är mindre än 0,1.

-eller-

loadFactor är större än 1,0.

Exempel

Följande kodexempel skapar hash-tabeller med olika Hashtable konstruktorer och visar skillnaderna i beteendet för hash-tabellerna, även om var och en innehåller samma element.

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 the dictionary.
        SortedList mySL = new SortedList();
        mySL.Add("FIRST", "Hello");
        mySL.Add("SECOND", "World");
        mySL.Add("THIRD", "!");

        // Create a hash table using the default comparer.
        Hashtable myHT1 = new Hashtable(mySL, .8f);

        // Create a hash table using the specified IEqualityComparer that uses
        // the CaseInsensitiveComparer.DefaultInvariant to determine equality.
        Hashtable myHT2 = new Hashtable(mySL, .8f,
            new myCultureComparer());

        // 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(mySL, .8f, new myCultureComparer(myCul));

        // 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

*/
Imports System.Collections
Imports System.Globalization

Public Class myCultureComparer
    Implements IEqualityComparer

    Dim myComparer As CaseInsensitiveComparer

    Public Sub New()
        myComparer = CaseInsensitiveComparer.DefaultInvariant
    End Sub

    Public Sub New(ByVal myCulture As CultureInfo)
        myComparer = New CaseInsensitiveComparer(myCulture)
    End Sub

    Public Function Equals1(ByVal x As Object, ByVal y As Object) _
        As Boolean Implements IEqualityComparer.Equals

        If (myComparer.Compare(x, y) = 0) Then
            Return True
        Else
            Return False
        End If
    End Function

    Public Function GetHashCode1(ByVal obj As Object) _
        As Integer Implements IEqualityComparer.GetHashCode
        Return obj.ToString().ToLower().GetHashCode()
    End Function
End Class

Public Class SamplesHashtable   

   Public Shared Sub Main()

      ' Create the dictionary.
      Dim mySL As New SortedList()
      mySL.Add("FIRST", "Hello")
      mySL.Add("SECOND", "World")
      mySL.Add("THIRD", "!")

      ' Create a hash table using the default comparer.
      Dim myHT1 As New Hashtable(mySL, System.Convert.ToSingle(0.8))

      ' Create a hash table using the specified IEqualityComparer that uses
      ' the CaseInsensitiveComparer.DefaultInvariant to determine equality.
      Dim myHT2 As New Hashtable(mySL, System.Convert.ToSingle(0.8), _
        New myCultureComparer())

      ' 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".
      Dim myCul As New CultureInfo("tr-TR")
      Dim myHT3 As New Hashtable(mySL, System.Convert.ToSingle(0.8), _
        New myCultureComparer(myCul))

      ' 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"))

   End Sub

End Class


'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

Kommentarer

Den initiala kapaciteten är inställd på antalet element i källordlistan. Kapaciteten ökas automatiskt efter behov baserat på belastningsfaktorn.

Belastningsfaktorn är det maximala förhållandet mellan element och bucketar. En mindre belastningsfaktor innebär snabbare uppslag på kostnaden för ökad minnesförbrukning. En belastningsfaktor på 1,0 är den bästa balansen mellan hastighet och storlek.

När den faktiska belastningsfaktorn når den angivna belastningsfaktorn ökas antalet bucketar automatiskt till det minsta primtal som är större än dubbelt så många bucketar som det aktuella antalet.

Objektet IEqualityComparer innehåller både hash-kodprovidern och jämförelsen. Om en IEqualityComparer används i Hashtable konstruktorn krävs inte de objekt som används som nycklar i Hashtable objektet för att åsidosätta Object.GetHashCode metoderna och Object.Equals .

Hash-kodprovidern delar ut hash-koder för nycklar i Hashtable. Standard-hash-kodprovidern är nyckelns implementering av Object.GetHashCode.

Jämförelsen avgör om två nycklar är lika med. Varje nyckel i en Hashtable måste vara unik. Standardjäxaren är nyckelns implementering av Object.Equals.

Möjliggör IEqualityComparer scenarier som att göra sökningar med skiftlägesokänsliga strängar.

Elementen i den nya Hashtable sorteras i samma ordning som uppräknaren itererar genom objektet IDictionary .

Den här konstruktorn är en O(n) åtgärd, där n är antalet element i parametern d .

Se även

Gäller för

Hashtable(IDictionary, IHashCodeProvider, IComparer)

Varning

Please use Hashtable(IDictionary, IEqualityComparer) instead.

Initierar en ny instans av Hashtable klassen genom att kopiera elementen från den angivna ordlistan till det nya Hashtable objektet. Det nya Hashtable objektet har en initial kapacitet som är lika med antalet element som kopieras och använder standardbelastningsfaktorn och den angivna hash-kodprovidern och jämförelsen. Det här API:et är föråldrat. Ett alternativ finns i Hashtable(IDictionary, IEqualityComparer).

public:
 Hashtable(System::Collections::IDictionary ^ d, System::Collections::IHashCodeProvider ^ hcp, System::Collections::IComparer ^ comparer);
public Hashtable(System.Collections.IDictionary d, System.Collections.IHashCodeProvider hcp, System.Collections.IComparer comparer);
[System.Obsolete("Please use Hashtable(IDictionary, IEqualityComparer) instead.")]
public Hashtable(System.Collections.IDictionary d, System.Collections.IHashCodeProvider hcp, System.Collections.IComparer comparer);
new System.Collections.Hashtable : System.Collections.IDictionary * System.Collections.IHashCodeProvider * System.Collections.IComparer -> System.Collections.Hashtable
[<System.Obsolete("Please use Hashtable(IDictionary, IEqualityComparer) instead.")>]
new System.Collections.Hashtable : System.Collections.IDictionary * System.Collections.IHashCodeProvider * System.Collections.IComparer -> System.Collections.Hashtable
Public Sub New (d As IDictionary, hcp As IHashCodeProvider, comparer As IComparer)

Parametrar

d
IDictionary

Objektet som IDictionary ska kopieras till ett nytt Hashtable objekt.

hcp
IHashCodeProvider

Objektet IHashCodeProvider som tillhandahåller hash-koderna för alla nycklar i Hashtable.

-eller-

null för att använda standard-hash-kodprovidern, som är varje nyckels implementering av GetHashCode().

comparer
IComparer

Det IComparer objekt som ska användas för att avgöra om två nycklar är lika med.

-eller-

null för att använda standardjäxaren, som är varje nyckels implementering av Equals(Object).

Attribut

Undantag

d är null.

Kommentarer

Den initiala kapaciteten är inställd på antalet element i källordlistan. Kapaciteten ökas automatiskt efter behov baserat på belastningsfaktorn.

Belastningsfaktorn är det maximala förhållandet mellan element och bucketar. En mindre belastningsfaktor innebär snabbare uppslag på kostnaden för ökad minnesförbrukning.

När den faktiska belastningsfaktorn når den angivna belastningsfaktorn ökas antalet bucketar automatiskt till det minsta primtal som är större än dubbelt så många bucketar som det aktuella antalet.

Hash-kodprovidern delar ut hash-koder för nycklar i Hashtable objektet. Standard-hash-kodprovidern är nyckelns implementering av Object.GetHashCode.

Jämförelsen avgör om två nycklar är lika med. Varje nyckel i en Hashtable måste vara unik. Standardjäxaren är nyckelns implementering av Object.Equals.

Den anpassade hash-kodprovidern och den anpassade jämförelsen aktiverar scenarier som att göra sökningar med skiftlägesokänsliga strängar.

Elementen i den nya Hashtable sorteras i samma ordning som uppräknaren itererar genom objektet IDictionary .

Den här konstruktorn är en O(n) åtgärd, där n är antalet element i parametern d .

Se även

Gäller för

Hashtable(Int32, Single)

Initierar en ny, tom instans av Hashtable klassen med den angivna initiala kapacitets- och inläsningsfaktorn samt standard-hash-kodprovidern och jämförelsen.

public:
 Hashtable(int capacity, float loadFactor);
public Hashtable(int capacity, float loadFactor);
new System.Collections.Hashtable : int * single -> System.Collections.Hashtable
Public Sub New (capacity As Integer, loadFactor As Single)

Parametrar

capacity
Int32

Det ungefärliga antalet element som Hashtable objektet kan innehålla från början.

loadFactor
Single

Ett tal i intervallet från 0,1 till 1,0 som multipliceras med standardvärdet som ger bästa prestanda. Resultatet är det maximala förhållandet mellan element och bucketar.

Undantag

capacity är mindre än noll.

-eller-

loadFactor är mindre än 0,1.

-eller-

loadFactor är större än 1,0.

capacity orsakar ett spill.

Exempel

Följande kodexempel skapar hash-tabeller med olika Hashtable konstruktorer och visar skillnaderna i beteendet för hash-tabellerna, även om var och en innehåller samma element.

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, .8f);
        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, .8f, 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, .8f, 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

*/
Imports System.Collections
Imports System.Globalization

Public Class myCultureComparer
    Implements IEqualityComparer

    Dim myComparer As CaseInsensitiveComparer

    Public Sub New()
        myComparer = CaseInsensitiveComparer.DefaultInvariant
    End Sub

    Public Sub New(ByVal myCulture As CultureInfo)
        myComparer = New CaseInsensitiveComparer(myCulture)
    End Sub

    Public Function Equals1(ByVal x As Object, ByVal y As Object) _
        As Boolean Implements IEqualityComparer.Equals

        If (myComparer.Compare(x, y) = 0) Then
            Return True
        Else
            Return False
        End If
    End Function

    Public Function GetHashCode1(ByVal obj As Object) _
        As Integer Implements IEqualityComparer.GetHashCode
        Return obj.ToString().ToLower().GetHashCode()
    End Function
End Class

Public Class SamplesHashtable

    Public Shared Sub Main()

        ' Create a hash table using the default comparer.
        Dim myHT1 As New Hashtable(3, System.Convert.ToSingle(0.8))
        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.
        Dim myHT2 As New Hashtable(3, System.Convert.ToSingle(0.8), _
            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".
        Dim myCul As New CultureInfo("tr-TR")
        Dim myHT3 As New Hashtable(3, System.Convert.ToSingle(0.8), _
            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"))

    End Sub

End Class


'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

Kommentarer

Om du anger den initiala kapaciteten eliminerar du behovet av att utföra ett antal storleksändringsåtgärder när element läggs till i Hashtable objektet. Kapaciteten ökas automatiskt efter behov baserat på belastningsfaktorn.

Belastningsfaktorn är det maximala förhållandet mellan element och bucketar. En mindre belastningsfaktor innebär snabbare uppslag på kostnaden för ökad minnesförbrukning. En belastningsfaktor på 1,0 är den bästa balansen mellan hastighet och storlek.

När den faktiska belastningsfaktorn når den angivna belastningsfaktorn ökas antalet bucketar automatiskt till det minsta primtal som är större än dubbelt så många bucketar som det aktuella antalet.

Hash-kodprovidern delar ut hash-koder för nycklar i Hashtable. Standard-hash-kodprovidern är nyckelns implementering av Object.GetHashCode.

Jämförelsen avgör om två nycklar är lika med. Varje nyckel i en Hashtable måste vara unik. Standardjäxaren är nyckelns implementering av Object.Equals.

Den här konstruktorn är en O(n) åtgärd, där n är parametern capacity .

Se även

Gäller för

Hashtable(SerializationInfo, StreamingContext)

Initierar en ny, tom instans av klassen som kan serialiseras med hjälp av Hashtable angivna SerializationInfo objekt och StreamingContext objekt.

protected:
 Hashtable(System::Runtime::Serialization::SerializationInfo ^ info, System::Runtime::Serialization::StreamingContext context);
protected Hashtable(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context);
new System.Collections.Hashtable : System.Runtime.Serialization.SerializationInfo * System.Runtime.Serialization.StreamingContext -> System.Collections.Hashtable
Protected Sub New (info As SerializationInfo, context As StreamingContext)

Parametrar

info
SerializationInfo

Ett SerializationInfo objekt som innehåller den information som krävs för att serialisera Hashtable objektet.

context
StreamingContext

Ett StreamingContext objekt som innehåller källan och målet för den serialiserade dataström som är associerad med Hashtable.

Undantag

info är null.

Kommentarer

En hash-tabells kapacitet används för att beräkna det optimala antalet hash-tabell bucketar baserat på belastningsfaktorn. Kapaciteten ökas automatiskt efter behov.

Belastningsfaktorn är det maximala förhållandet mellan element och bucketar. En mindre belastningsfaktor innebär snabbare uppslag på kostnaden för ökad minnesförbrukning.

När den faktiska belastningsfaktorn når den angivna belastningsfaktorn ökas antalet bucketar automatiskt till det minsta primtal som är större än dubbelt så många bucketar som det aktuella antalet.

Hash-kodprovidern delar ut hash-koder för nycklar i Hashtable objektet. Standard-hash-kodprovidern är nyckelns implementering av Object.GetHashCode.

Jämförelsen avgör om två nycklar är lika med. Varje nyckel i en Hashtable måste vara unik. Standardjäxaren är nyckelns implementering av Object.Equals.

Den här konstruktorn är en O(n) åtgärd, där n är Count.

Eftersom serialisering och deserialisering av en uppräknare för en Hashtable kan göra att elementen sorteras om, går det inte att fortsätta uppräkningen utan att anropa Reset metoden.

Se även

Gäller för

Hashtable(IHashCodeProvider, IComparer)

Varning

Please use Hashtable(IEqualityComparer) instead.

Initierar en ny, tom instans av Hashtable klassen med standardfaktorn för initial kapacitet och inläsning, samt den angivna hash-kodprovidern och jämförelsen.

public:
 Hashtable(System::Collections::IHashCodeProvider ^ hcp, System::Collections::IComparer ^ comparer);
public Hashtable(System.Collections.IHashCodeProvider hcp, System.Collections.IComparer comparer);
[System.Obsolete("Please use Hashtable(IEqualityComparer) instead.")]
public Hashtable(System.Collections.IHashCodeProvider hcp, System.Collections.IComparer comparer);
new System.Collections.Hashtable : System.Collections.IHashCodeProvider * System.Collections.IComparer -> System.Collections.Hashtable
[<System.Obsolete("Please use Hashtable(IEqualityComparer) instead.")>]
new System.Collections.Hashtable : System.Collections.IHashCodeProvider * System.Collections.IComparer -> System.Collections.Hashtable
Public Sub New (hcp As IHashCodeProvider, comparer As IComparer)

Parametrar

hcp
IHashCodeProvider

Objektet IHashCodeProvider som tillhandahåller hash-koderna för alla nycklar i Hashtable objektet.

-eller-

null för att använda standard-hash-kodprovidern, som är varje nyckels implementering av GetHashCode().

comparer
IComparer

Det IComparer objekt som ska användas för att avgöra om två nycklar är lika med.

-eller-

null för att använda standardjäxaren, som är varje nyckels implementering av Equals(Object).

Attribut

Kommentarer

En hash-tabells kapacitet används för att beräkna det optimala antalet hash-tabell bucketar baserat på belastningsfaktorn. Kapaciteten ökas automatiskt efter behov.

Belastningsfaktorn är det maximala förhållandet mellan element och bucketar. En mindre belastningsfaktor innebär snabbare uppslag på kostnaden för ökad minnesförbrukning.

När den faktiska belastningsfaktorn når den angivna belastningsfaktorn ökas antalet bucketar automatiskt till det minsta primtal som är större än dubbelt så många bucketar som det aktuella antalet.

Hash-kodprovidern delar ut hash-koder för nycklar i Hashtable objektet. Standard-hash-kodprovidern är nyckelns implementering av Object.GetHashCode.

Jämförelsen avgör om två nycklar är lika med. Varje nyckel i en Hashtable måste vara unik. Standardjäxaren är nyckelns implementering av Object.Equals.

Den anpassade hash-kodprovidern och den anpassade jämförelsen aktiverar scenarier som att göra sökningar med skiftlägesokänsliga strängar.

Den här konstruktorn är en O(1) åtgärd.

Se även

Gäller för

Hashtable(IDictionary, Single)

Initierar en ny instans av Hashtable klassen genom att kopiera elementen från den angivna ordlistan till det nya Hashtable objektet. Det nya Hashtable objektet har en initial kapacitet som är lika med antalet kopierade element och använder den angivna inläsningsfaktorn samt standard-hash-kodprovidern och jämförelsen.

public:
 Hashtable(System::Collections::IDictionary ^ d, float loadFactor);
public Hashtable(System.Collections.IDictionary d, float loadFactor);
new System.Collections.Hashtable : System.Collections.IDictionary * single -> System.Collections.Hashtable
Public Sub New (d As IDictionary, loadFactor As Single)

Parametrar

d
IDictionary

Objektet som IDictionary ska kopieras till ett nytt Hashtable objekt.

loadFactor
Single

Ett tal i intervallet från 0,1 till 1,0 som multipliceras med standardvärdet som ger bästa prestanda. Resultatet är det maximala förhållandet mellan element och bucketar.

Undantag

d är null.

loadFactor är mindre än 0,1.

-eller-

loadFactor är större än 1,0.

Exempel

Följande kodexempel skapar hash-tabeller med olika Hashtable konstruktorer och visar skillnaderna i beteendet för hash-tabellerna, även om var och en innehåller samma element.

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 the dictionary.
        SortedList mySL = new SortedList();
        mySL.Add("FIRST", "Hello");
        mySL.Add("SECOND", "World");
        mySL.Add("THIRD", "!");

        // Create a hash table using the default comparer.
        Hashtable myHT1 = new Hashtable(mySL, .8f);

        // Create a hash table using the specified IEqualityComparer that uses
        // the CaseInsensitiveComparer.DefaultInvariant to determine equality.
        Hashtable myHT2 = new Hashtable(mySL, .8f,
            new myCultureComparer());

        // 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(mySL, .8f, new myCultureComparer(myCul));

        // 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

*/
Imports System.Collections
Imports System.Globalization

Public Class myCultureComparer
    Implements IEqualityComparer

    Dim myComparer As CaseInsensitiveComparer

    Public Sub New()
        myComparer = CaseInsensitiveComparer.DefaultInvariant
    End Sub

    Public Sub New(ByVal myCulture As CultureInfo)
        myComparer = New CaseInsensitiveComparer(myCulture)
    End Sub

    Public Function Equals1(ByVal x As Object, ByVal y As Object) _
        As Boolean Implements IEqualityComparer.Equals

        If (myComparer.Compare(x, y) = 0) Then
            Return True
        Else
            Return False
        End If
    End Function

    Public Function GetHashCode1(ByVal obj As Object) _
        As Integer Implements IEqualityComparer.GetHashCode
        Return obj.ToString().ToLower().GetHashCode()
    End Function
End Class

Public Class SamplesHashtable   

   Public Shared Sub Main()

      ' Create the dictionary.
      Dim mySL As New SortedList()
      mySL.Add("FIRST", "Hello")
      mySL.Add("SECOND", "World")
      mySL.Add("THIRD", "!")

      ' Create a hash table using the default comparer.
      Dim myHT1 As New Hashtable(mySL, System.Convert.ToSingle(0.8))

      ' Create a hash table using the specified IEqualityComparer that uses
      ' the CaseInsensitiveComparer.DefaultInvariant to determine equality.
      Dim myHT2 As New Hashtable(mySL, System.Convert.ToSingle(0.8), _
        New myCultureComparer())

      ' 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".
      Dim myCul As New CultureInfo("tr-TR")
      Dim myHT3 As New Hashtable(mySL, System.Convert.ToSingle(0.8), _
        New myCultureComparer(myCul))

      ' 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"))

   End Sub

End Class


'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

Kommentarer

Den initiala kapaciteten är inställd på antalet element i källordlistan. Kapaciteten ökas automatiskt efter behov baserat på belastningsfaktorn.

Belastningsfaktorn är det maximala förhållandet mellan element och bucketar. En mindre belastningsfaktor innebär snabbare uppslag på kostnaden för ökad minnesförbrukning. En belastningsfaktor på 1,0 är den bästa balansen mellan hastighet och storlek.

När den faktiska belastningsfaktorn når den angivna belastningsfaktorn ökas antalet bucketar automatiskt till det minsta primtal som är större än dubbelt så många bucketar som det aktuella antalet.

Hash-kodprovidern delar ut hash-koder för nycklar i Hashtable objektet. Standard-hash-kodprovidern är nyckelns implementering av Object.GetHashCode.

Jämförelsen avgör om två nycklar är lika med. Varje nyckel i en Hashtable måste vara unik. Standardjäxaren är nyckelns implementering av Object.Equals.

Elementen i den nya Hashtable sorteras i samma ordning som uppräknaren itererar genom objektet IDictionary .

Den här konstruktorn är en O(n) åtgärd, där n är antalet element i parametern d .

Se även

Gäller för

Hashtable(IDictionary, IEqualityComparer)

Initierar en ny instans av Hashtable klassen genom att kopiera elementen från den angivna ordlistan till ett nytt Hashtable objekt. Det nya Hashtable objektet har en initial kapacitet som är lika med antalet element som kopieras och använder standardbelastningsfaktorn och det angivna IEqualityComparer objektet.

public:
 Hashtable(System::Collections::IDictionary ^ d, System::Collections::IEqualityComparer ^ equalityComparer);
public Hashtable(System.Collections.IDictionary d, System.Collections.IEqualityComparer equalityComparer);
new System.Collections.Hashtable : System.Collections.IDictionary * System.Collections.IEqualityComparer -> System.Collections.Hashtable
Public Sub New (d As IDictionary, equalityComparer As IEqualityComparer)

Parametrar

d
IDictionary

Objektet som IDictionary ska kopieras till ett nytt Hashtable objekt.

equalityComparer
IEqualityComparer

Objektet IEqualityComparer som definierar hash-kodprovidern och jämförelsen som ska användas med Hashtable.

-eller-

null för att använda standard-hash-kodprovidern och standardjäxaren. Standard-hash-kodprovidern är varje nyckels implementering av GetHashCode() och standardjäxaren är varje nyckels implementering av Equals(Object).

Undantag

d är null.

Exempel

Följande kodexempel skapar hash-tabeller med olika Hashtable konstruktorer och visar skillnaderna i beteendet för hash-tabellerna, även om var och en innehåller samma element.

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)
    {
        return myComparer.Compare(x, y) == 0;
    }

    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 the dictionary.
        var mySL = new SortedList();
        mySL.Add("FIRST", "Hello");
        mySL.Add("SECOND", "World");
        mySL.Add("THIRD", "!");

        // Create a hash table using the default comparer.
        var myHT1 = new Hashtable(mySL);

        // Create a hash table using the specified IEqualityComparer that uses
        // the CaseInsensitiveComparer.DefaultInvariant to determine equality.
        var myHT2 = new Hashtable(mySL, new myCultureComparer());

        // 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".
        var myCul = new CultureInfo("tr-TR");
        var myHT3 = new Hashtable(mySL, new myCultureComparer(myCul));

        // Search for a key in each hash table.
        Console.WriteLine($"first is in myHT1: {myHT1.ContainsKey("first")}");
        Console.WriteLine($"first is in myHT2: {myHT2.ContainsKey("first")}");
        Console.WriteLine($"first is in myHT3: {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

*/
Imports System.Collections
Imports System.Globalization

Public Class myCultureComparer
    Implements IEqualityComparer

    Dim myComparer As CaseInsensitiveComparer

    Public Sub New()
        myComparer = CaseInsensitiveComparer.DefaultInvariant
    End Sub

    Public Sub New(ByVal myCulture As CultureInfo)
        myComparer = New CaseInsensitiveComparer(myCulture)
    End Sub

    Public Function Equals1(ByVal x As Object, ByVal y As Object) _
        As Boolean Implements IEqualityComparer.Equals

        Return myComparer.Compare(x, y) = 0
    End Function

    Public Function GetHashCode1(ByVal obj As Object) _
        As Integer Implements IEqualityComparer.GetHashCode
        Return obj.ToString().ToLower().GetHashCode()
    End Function
End Class

Public Class SamplesHashtable   

   Public Shared Sub Main()

      ' Create the dictionary.
      Dim mySL As New SortedList()
      mySL.Add("FIRST", "Hello")
      mySL.Add("SECOND", "World")
      mySL.Add("THIRD", "!")

      ' Create a hash table using the default comparer.
      Dim myHT1 As New Hashtable(mySL)

      ' Create a hash table using the specified IEqualityComparer that uses
      ' the CaseInsensitiveComparer.DefaultInvariant to determine equality.
      Dim myHT2 As New Hashtable(mySL, New myCultureComparer())

      ' 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".
      Dim myCul As New CultureInfo("tr-TR")
      Dim myHT3 As New Hashtable(mySL, New myCultureComparer(myCul))

      ' Search for a key in each hash table.
      Console.WriteLine($"first is in myHT1: {myHT1.ContainsKey("first")}")
      Console.WriteLine($"first is in myHT2: {myHT2.ContainsKey("first")}")
      Console.WriteLine($"first is in myHT3: {myHT3.ContainsKey("first")}")

   End Sub

End Class


'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

Kommentarer

Den initiala kapaciteten är inställd på antalet element i källordlistan. Kapaciteten ökas automatiskt efter behov baserat på belastningsfaktorn.

Belastningsfaktorn är det maximala förhållandet mellan element och bucketar. En mindre belastningsfaktor innebär snabbare uppslag på kostnaden för ökad minnesförbrukning.

När den faktiska belastningsfaktorn når den angivna belastningsfaktorn ökas antalet bucketar automatiskt till det minsta primtal som är större än dubbelt så många bucketar som det aktuella antalet.

Objektet IEqualityComparer innehåller både hash-kodprovidern och jämförelsen. Om en IEqualityComparer används i Hashtable konstruktorn krävs inte de objekt som används som nycklar i Hashtable objektet för att åsidosätta Object.GetHashCode metoderna och Object.Equals .

Hash-kodprovidern delar ut hash-koder för nycklar i Hashtable. Standard-hash-kodprovidern är nyckelns implementering av Object.GetHashCode.

Jämförelsen avgör om två nycklar är lika med. Varje nyckel i en Hashtable måste vara unik. Standardjäxaren är nyckelns implementering av Object.Equals.

Möjliggör IEqualityComparer scenarier som att göra sökningar med skiftlägesokänsliga strängar.

Elementen i den nya Hashtable sorteras i samma ordning som uppräknaren itererar genom objektet IDictionary .

Den här konstruktorn är en O(n) åtgärd, där n är antalet element i parametern d .

Se även

Gäller för

Hashtable(Int32)

Initierar en ny, tom instans av Hashtable klassen med den angivna initiala kapaciteten och standardbelastningsfaktorn, hash-kodprovidern och jämförelsen.

public:
 Hashtable(int capacity);
public Hashtable(int capacity);
new System.Collections.Hashtable : int -> System.Collections.Hashtable
Public Sub New (capacity As Integer)

Parametrar

capacity
Int32

Det ungefärliga antalet element som Hashtable objektet kan innehålla från början.

Undantag

capacity är mindre än noll.

Exempel

Följande kodexempel skapar hash-tabeller med olika Hashtable konstruktorer och visar skillnaderna i beteendet för hash-tabellerna, även om var och en innehåller samma element.

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

*/
Imports System.Collections
Imports System.Globalization

Public Class myCultureComparer
    Implements IEqualityComparer

    Dim myComparer As CaseInsensitiveComparer

    Public Sub New()
        myComparer = CaseInsensitiveComparer.DefaultInvariant
    End Sub

    Public Sub New(ByVal myCulture As CultureInfo)
        myComparer = New CaseInsensitiveComparer(myCulture)
    End Sub

    Public Function Equals1(ByVal x As Object, ByVal y As Object) _
        As Boolean Implements IEqualityComparer.Equals

        If (myComparer.Compare(x, y) = 0) Then
            Return True
        Else
            Return False
        End If
    End Function

    Public Function GetHashCode1(ByVal obj As Object) _
        As Integer Implements IEqualityComparer.GetHashCode
        Return obj.ToString().ToLower().GetHashCode()
    End Function
End Class

Public Class SamplesHashtable   

   Public Shared Sub Main()

      ' Create a hash table using the default comparer.
      Dim myHT1 As 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.
      Dim myHT2 As 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".
      Dim myCul As New CultureInfo("tr-TR")
      Dim myHT3 As 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"))

   End Sub

End Class


'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

Kommentarer

Om du anger den initiala kapaciteten eliminerar du behovet av att utföra ett antal storleksändringsåtgärder när element läggs till i Hashtable objektet. Kapaciteten ökas automatiskt efter behov baserat på belastningsfaktorn.

Belastningsfaktorn är det maximala förhållandet mellan element och bucketar. En mindre belastningsfaktor innebär snabbare uppslag på kostnaden för ökad minnesförbrukning.

När den faktiska belastningsfaktorn når den angivna belastningsfaktorn ökas antalet bucketar automatiskt till det minsta primtal som är större än dubbelt så många bucketar som det aktuella antalet.

Hash-kodprovidern delar ut hash-koder för nycklar i Hashtable. Standard-hash-kodprovidern är nyckelns implementering av Object.GetHashCode.

Jämförelsen avgör om två nycklar är lika med. Varje nyckel i en Hashtable måste vara unik. Standardjäxaren är nyckelns implementering av Object.Equals.

Den här konstruktorn är en O(n) åtgärd, där n är capacity.

Se även

Gäller för

Hashtable(IEqualityComparer)

Initierar en ny, tom instans av Hashtable klassen med standardfaktorn för initial kapacitet och inläsning och det angivna IEqualityComparer objektet.

public:
 Hashtable(System::Collections::IEqualityComparer ^ equalityComparer);
public Hashtable(System.Collections.IEqualityComparer equalityComparer);
new System.Collections.Hashtable : System.Collections.IEqualityComparer -> System.Collections.Hashtable
Public Sub New (equalityComparer As IEqualityComparer)

Parametrar

equalityComparer
IEqualityComparer

Objektet IEqualityComparer som definierar hash-kodprovidern och jämförelsen som ska användas med Hashtable objektet.

-eller-

null för att använda standard-hash-kodprovidern och standardjäxaren. Standard-hash-kodprovidern är varje nyckels implementering av GetHashCode() och standardjäxaren är varje nyckels implementering av Equals(Object).

Exempel

Följande kodexempel skapar hash-tabeller med olika Hashtable konstruktorer och visar skillnaderna i beteendet för hash-tabellerna, även om var och en innehåller samma element.

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

class myComparer : IEqualityComparer
{
    public new bool Equals(object x, object y)
    {
        return x.Equals(y);
    }

    public int GetHashCode(object obj)
    {
        return obj.ToString().ToLower().GetHashCode();
    }
}

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)
    {
        return myComparer.Compare(x, y) == 0;
    }

    public int GetHashCode(object obj)
    {
        return obj.ToString().ToLower().GetHashCode();
    }
}

public class SamplesHashtable
{

    public static void Main()
    {

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

        // Create a hash table using the specified IEqualityComparer that uses
        // the default Object.Equals to determine equality.
        var myHT2 = new Hashtable(new myComparer());
        myHT2.Add("FIRST", "Hello");
        myHT2.Add("SECOND", "World");
        myHT2.Add("THIRD", "!");

        // Create a hash table using a case-insensitive hash code provider and
        // case-insensitive comparer based on the InvariantCulture.
        Hashtable myHT3 = new Hashtable(
            CaseInsensitiveHashCodeProvider.DefaultInvariant,
            CaseInsensitiveComparer.DefaultInvariant);
        myHT3.Add("FIRST", "Hello");
        myHT3.Add("SECOND", "World");
        myHT3.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".
        var myCul = new CultureInfo("tr-TR");
        var myHT4 = new Hashtable(new myCultureComparer(myCul));
        myHT4.Add("FIRST", "Hello");
        myHT4.Add("SECOND", "World");
        myHT4.Add("THIRD", "!");

        // Search for a key in each hash table.
        Console.WriteLine($"first is in myHT1: {myHT1.ContainsKey("first")}");
        Console.WriteLine($"first is in myHT2: {myHT2.ContainsKey("first")}");
        Console.WriteLine($"first is in myHT3: {myHT3.ContainsKey("first")}");
        Console.WriteLine($"first is in myHT4: {myHT4.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: False
first is in myHT3: True
first is in myHT4: False

*/
Imports System.Collections
Imports System.Globalization

Public Class myComparer
    Implements IEqualityComparer
    Public Function Equals1(ByVal x As Object, ByVal y As Object) _
        As Boolean Implements IEqualityComparer.Equals

        Return x.Equals(y)
    End Function

    Public Function GetHashCode1(ByVal obj As Object) _
        As Integer Implements IEqualityComparer.GetHashCode

        Return obj.ToString().ToLower().GetHashCode()
    End Function

End Class

Public Class myCultureComparer
    Implements IEqualityComparer

    Dim myComparer As CaseInsensitiveComparer

    Public Sub New()
        myComparer = CaseInsensitiveComparer.DefaultInvariant
    End Sub

    Public Sub New(ByVal myCulture As CultureInfo)
        myComparer = New CaseInsensitiveComparer(myCulture)
    End Sub

    Public Function Equals1(ByVal x As Object, ByVal y As Object) _
        As Boolean Implements IEqualityComparer.Equals

        Return myComparer.Compare(x, y) = 0
    End Function

    Public Function GetHashCode1(ByVal obj As Object) _
        As Integer Implements IEqualityComparer.GetHashCode
        Return obj.ToString().ToLower().GetHashCode()
    End Function
End Class

Public Class SamplesHashtable

    Public Shared Sub Main()

        ' Create a hash table using the default comparer.
        Dim myHT1 As New Hashtable()
        myHT1.Add("FIRST", "Hello")
        myHT1.Add("SECOND", "World")
        myHT1.Add("THIRD", "!")

        ' Create a hash table using the specified IEqualityComparer that uses
        ' the default Object.Equals to determine equality.
        Dim myHT2 As New Hashtable(New myComparer())
        myHT2.Add("FIRST", "Hello")
        myHT2.Add("SECOND", "World")
        myHT2.Add("THIRD", "!")

        ' Create a hash table using a case-insensitive hash code provider and
        ' case-insensitive comparer based on the InvariantCulture.
        Dim myHT3 As New Hashtable( _
            CaseInsensitiveHashCodeProvider.DefaultInvariant, _
            CaseInsensitiveComparer.DefaultInvariant)
        myHT3.Add("FIRST", "Hello")
        myHT3.Add("SECOND", "World")
        myHT3.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".
        Dim myCul As New CultureInfo("tr-TR")
        Dim myHT4 As New Hashtable(New myCultureComparer(myCul))
        myHT4.Add("FIRST", "Hello")
        myHT4.Add("SECOND", "World")
        myHT4.Add("THIRD", "!")

        ' Search for a key in each hash table.
        Console.WriteLine($"first is in myHT1: {myHT1.ContainsKey("first")}")
        Console.WriteLine($"first is in myHT2: {myHT2.ContainsKey("first")}")
        Console.WriteLine($"first is in myHT3: {myHT3.ContainsKey("first")}")
        Console.WriteLine($"first is in myHT4: {myHT4.ContainsKey("first")}")

    End Sub

End Class

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

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

Kommentarer

En hash-tabells kapacitet används för att beräkna det optimala antalet hash-tabell bucketar baserat på belastningsfaktorn. Kapaciteten ökas automatiskt efter behov.

Belastningsfaktorn är det maximala förhållandet mellan element och bucketar. En mindre belastningsfaktor innebär snabbare uppslag på kostnaden för ökad minnesförbrukning.

När den faktiska belastningsfaktorn når den angivna belastningsfaktorn ökas antalet bucketar automatiskt till det minsta primtal som är större än dubbelt så många bucketar som det aktuella antalet.

Objektet IEqualityComparer innehåller både hash-kodprovidern och jämförelsen. Om en IEqualityComparer används i Hashtable konstruktorn krävs inte de objekt som används som nycklar i Hashtable objektet för att åsidosätta Object.GetHashCode metoderna och Object.Equals .

Hash-kodprovidern delar ut hash-koder för nycklar i Hashtable. Standard-hash-kodprovidern är nyckelns implementering av Object.GetHashCode.

Jämförelsen avgör om två nycklar är lika med. Varje nyckel i en Hashtable måste vara unik. Standardjäxaren är nyckelns implementering av Object.Equals.

Möjliggör IEqualityComparer scenarier som att göra sökningar med skiftlägesokänsliga strängar.

Den här konstruktorn är en O(1) åtgärd.

Se även

Gäller för

Hashtable(IDictionary)

Initierar en ny instans av Hashtable klassen genom att kopiera elementen från den angivna ordlistan till det nya Hashtable objektet. Det nya Hashtable objektet har en initial kapacitet som är lika med antalet element som kopieras och använder standardbelastningsfaktorn, hash-kodprovidern och jämförelsen.

public:
 Hashtable(System::Collections::IDictionary ^ d);
public Hashtable(System.Collections.IDictionary d);
new System.Collections.Hashtable : System.Collections.IDictionary -> System.Collections.Hashtable
Public Sub New (d As IDictionary)

Parametrar

d
IDictionary

Objektet som IDictionary ska kopieras till ett nytt Hashtable objekt.

Undantag

d är null.

Exempel

Följande kodexempel skapar hash-tabeller med olika Hashtable konstruktorer och visar skillnaderna i beteendet för hash-tabellerna, även om var och en innehåller samma element.

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)
    {
        return myComparer.Compare(x, y) == 0;
    }

    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 the dictionary.
        var mySL = new SortedList();
        mySL.Add("FIRST", "Hello");
        mySL.Add("SECOND", "World");
        mySL.Add("THIRD", "!");

        // Create a hash table using the default comparer.
        var myHT1 = new Hashtable(mySL);

        // Create a hash table using the specified IEqualityComparer that uses
        // the CaseInsensitiveComparer.DefaultInvariant to determine equality.
        var myHT2 = new Hashtable(mySL, new myCultureComparer());

        // 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".
        var myCul = new CultureInfo("tr-TR");
        var myHT3 = new Hashtable(mySL, new myCultureComparer(myCul));

        // Search for a key in each hash table.
        Console.WriteLine($"first is in myHT1: {myHT1.ContainsKey("first")}");
        Console.WriteLine($"first is in myHT2: {myHT2.ContainsKey("first")}");
        Console.WriteLine($"first is in myHT3: {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

*/
Imports System.Collections
Imports System.Globalization

Public Class myCultureComparer
    Implements IEqualityComparer

    Dim myComparer As CaseInsensitiveComparer

    Public Sub New()
        myComparer = CaseInsensitiveComparer.DefaultInvariant
    End Sub

    Public Sub New(ByVal myCulture As CultureInfo)
        myComparer = New CaseInsensitiveComparer(myCulture)
    End Sub

    Public Function Equals1(ByVal x As Object, ByVal y As Object) _
        As Boolean Implements IEqualityComparer.Equals

        Return myComparer.Compare(x, y) = 0
    End Function

    Public Function GetHashCode1(ByVal obj As Object) _
        As Integer Implements IEqualityComparer.GetHashCode
        Return obj.ToString().ToLower().GetHashCode()
    End Function
End Class

Public Class SamplesHashtable   

   Public Shared Sub Main()

      ' Create the dictionary.
      Dim mySL As New SortedList()
      mySL.Add("FIRST", "Hello")
      mySL.Add("SECOND", "World")
      mySL.Add("THIRD", "!")

      ' Create a hash table using the default comparer.
      Dim myHT1 As New Hashtable(mySL)

      ' Create a hash table using the specified IEqualityComparer that uses
      ' the CaseInsensitiveComparer.DefaultInvariant to determine equality.
      Dim myHT2 As New Hashtable(mySL, New myCultureComparer())

      ' 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".
      Dim myCul As New CultureInfo("tr-TR")
      Dim myHT3 As New Hashtable(mySL, New myCultureComparer(myCul))

      ' Search for a key in each hash table.
      Console.WriteLine($"first is in myHT1: {myHT1.ContainsKey("first")}")
      Console.WriteLine($"first is in myHT2: {myHT2.ContainsKey("first")}")
      Console.WriteLine($"first is in myHT3: {myHT3.ContainsKey("first")}")

   End Sub

End Class


'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

Kommentarer

Den initiala kapaciteten är inställd på antalet element i källordlistan. Kapaciteten ökas automatiskt efter behov baserat på belastningsfaktorn.

Belastningsfaktorn är det maximala förhållandet mellan element och bucketar. En mindre belastningsfaktor innebär snabbare uppslag på kostnaden för ökad minnesförbrukning.

När den faktiska belastningsfaktorn når den angivna belastningsfaktorn ökas antalet bucketar automatiskt till det minsta primtal som är större än dubbelt så många bucketar som det aktuella antalet.

Hash-kodprovidern delar ut hash-koder för nycklar i Hashtable objektet. Standard-hash-kodprovidern är nyckelns implementering av Object.GetHashCode.

Jämförelsen avgör om två nycklar är lika med. Varje nyckel i en Hashtable måste vara unik. Standardjäxaren är nyckelns implementering av Object.Equals.

Elementen i den nya Hashtable sorteras i samma ordning som uppräknaren itererar genom objektet IDictionary .

Den här konstruktorn är en O(n) åtgärd, där n är antalet element i parametern d .

Se även

Gäller för

Hashtable(Int32, IEqualityComparer)

Initierar en ny, tom instans av Hashtable klassen med den angivna initiala kapaciteten och IEqualityComparer, och standardbelastningsfaktorn.

public:
 Hashtable(int capacity, System::Collections::IEqualityComparer ^ equalityComparer);
public Hashtable(int capacity, System.Collections.IEqualityComparer equalityComparer);
new System.Collections.Hashtable : int * System.Collections.IEqualityComparer -> System.Collections.Hashtable
Public Sub New (capacity As Integer, equalityComparer As IEqualityComparer)

Parametrar

capacity
Int32

Det ungefärliga antalet element som Hashtable objektet kan innehålla från början.

equalityComparer
IEqualityComparer

Objektet IEqualityComparer som definierar hash-kodprovidern och jämförelsen som ska användas med Hashtable.

-eller-

null för att använda standard-hash-kodprovidern och standardjäxaren. Standard-hash-kodprovidern är varje nyckels implementering av GetHashCode() och standardjäxaren är varje nyckels implementering av Equals(Object).

Undantag

capacity är mindre än noll.

Exempel

Följande kodexempel skapar hash-tabeller med olika Hashtable konstruktorer och visar skillnaderna i beteendet för hash-tabellerna, även om var och en innehåller samma element.

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

*/
Imports System.Collections
Imports System.Globalization

Public Class myCultureComparer
    Implements IEqualityComparer

    Dim myComparer As CaseInsensitiveComparer

    Public Sub New()
        myComparer = CaseInsensitiveComparer.DefaultInvariant
    End Sub

    Public Sub New(ByVal myCulture As CultureInfo)
        myComparer = New CaseInsensitiveComparer(myCulture)
    End Sub

    Public Function Equals1(ByVal x As Object, ByVal y As Object) _
        As Boolean Implements IEqualityComparer.Equals

        If (myComparer.Compare(x, y) = 0) Then
            Return True
        Else
            Return False
        End If
    End Function

    Public Function GetHashCode1(ByVal obj As Object) _
        As Integer Implements IEqualityComparer.GetHashCode
        Return obj.ToString().ToLower().GetHashCode()
    End Function
End Class

Public Class SamplesHashtable   

   Public Shared Sub Main()

      ' Create a hash table using the default comparer.
      Dim myHT1 As 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.
      Dim myHT2 As 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".
      Dim myCul As New CultureInfo("tr-TR")
      Dim myHT3 As 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"))

   End Sub

End Class


'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

Kommentarer

Om du anger den initiala kapaciteten eliminerar du behovet av att utföra ett antal storleksändringsåtgärder när element läggs till i Hashtable objektet. Kapaciteten ökas automatiskt efter behov baserat på belastningsfaktorn.

Belastningsfaktorn är det maximala förhållandet mellan element och bucketar. En mindre belastningsfaktor innebär snabbare uppslag på kostnaden för ökad minnesförbrukning.

När den faktiska belastningsfaktorn når den angivna belastningsfaktorn ökas antalet bucketar automatiskt till det minsta primtal som är större än dubbelt så många bucketar som det aktuella antalet.

Objektet IEqualityComparer innehåller både hash-kodprovidern och jämförelsen. Om en IEqualityComparer används i Hashtable konstruktorn krävs Object.GetHashCode inte de objekt som används som nycklar i Hashtable metoderna ochObject.Equals.

Hash-kodprovidern delar ut hash-koder för nycklar i Hashtable. Standard-hash-kodprovidern är nyckelns implementering av Object.GetHashCode.

Jämförelsen avgör om två nycklar är lika med. Varje nyckel i en Hashtable måste vara unik. Standardjäxaren är nyckelns implementering av Object.Equals.

Möjliggör IEqualityComparer scenarier som att göra sökningar med skiftlägesokänsliga strängar.

Den här konstruktorn är en O(n) åtgärd, där n är parametern capacity .

Se även

Gäller för