Hashtable Konstruktoren
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Initialisiert eine neue Instanz der Hashtable-Klasse.
Überlädt
| Name | Beschreibung |
|---|---|
| Hashtable() |
Initialisiert eine neue, leere Instanz der Hashtable Klasse mithilfe der Standardkapazität, des Ladefaktors, des Hashcodeanbieters und des Vergleichs. |
| Hashtable(Int32, Single, IHashCodeProvider, IComparer) |
Veraltet.
Initialisiert eine neue, leere Instanz der Hashtable Klasse mithilfe der angegebenen Anfangskapazität, des Ladefaktors, des Hashcodeanbieters und des Vergleichs. |
| Hashtable(IDictionary, Single, IHashCodeProvider, IComparer) |
Veraltet.
Initialisiert eine neue Instanz der Hashtable Klasse, indem die Elemente aus dem angegebenen Wörterbuch in das neue Hashtable Objekt kopiert werden. Das neue Hashtable Objekt verfügt über eine anfängliche Kapazität, die der Anzahl der kopierten Elemente entspricht, und verwendet den angegebenen Ladefaktor, den Hashcodeanbieter und den Vergleich. |
| Hashtable(Int32, Single, IEqualityComparer) |
Initialisiert eine neue, leere Instanz der Hashtable Klasse mithilfe der angegebenen Anfangskapazität, des Ladefaktors und IEqualityComparer des Objekts. |
| Hashtable(Int32, IHashCodeProvider, IComparer) |
Veraltet.
Initialisiert eine neue, leere Instanz der Klasse mithilfe der Hashtable angegebenen Anfangskapazität, des Hashcodeanbieters, des Vergleichs und des Standardlastfaktors. |
| Hashtable(IDictionary, Single, IEqualityComparer) |
Initialisiert eine neue Instanz der Hashtable Klasse, indem die Elemente aus dem angegebenen Wörterbuch in das neue Hashtable Objekt kopiert werden. Das neue Hashtable Objekt verfügt über eine anfängliche Kapazität, die der Anzahl der kopierten Elemente entspricht, und verwendet den angegebenen Ladefaktor und IEqualityComparer das angegebene Objekt. |
| Hashtable(IDictionary, IHashCodeProvider, IComparer) |
Veraltet.
Initialisiert eine neue Instanz der Hashtable Klasse, indem die Elemente aus dem angegebenen Wörterbuch in das neue Hashtable Objekt kopiert werden. Das neue Hashtable Objekt verfügt über eine anfängliche Kapazität, die der Anzahl der kopierten Elemente entspricht, und verwendet den Standardladefaktor und den angegebenen Hashcodeanbieter und -vergleicher. Diese API ist veraltet. Eine Alternative finden Sie unter Hashtable(IDictionary, IEqualityComparer). |
| Hashtable(Int32, Single) |
Initialisiert eine neue, leere Instanz der Hashtable Klasse mithilfe des angegebenen Anfangskapazitäts- und Ladefaktors und des Standardmäßigen Hashcodeanbieters und -vergleichs. |
| Hashtable(SerializationInfo, StreamingContext) |
Initialisiert eine neue, leere Instanz der Klasse, die mithilfe der Hashtable angegebenen SerializationInfo Objekte StreamingContext serialisierbar ist. |
| Hashtable(IHashCodeProvider, IComparer) |
Veraltet.
Initialisiert eine neue, leere Instanz der Hashtable Klasse unter Verwendung des Standard-Anfangskapazitäts- und Lastfaktors und des angegebenen Hashcodeanbieters und -vergleichs. |
| Hashtable(IDictionary, Single) |
Initialisiert eine neue Instanz der Hashtable Klasse, indem die Elemente aus dem angegebenen Wörterbuch in das neue Hashtable Objekt kopiert werden. Das neue Hashtable Objekt verfügt über eine anfängliche Kapazität, die der Anzahl der kopierten Elemente entspricht, und verwendet den angegebenen Ladefaktor sowie den Standardhashcodeanbieter und -vergleicher. |
| Hashtable(IDictionary, IEqualityComparer) |
Initialisiert eine neue Instanz der Hashtable Klasse, indem die Elemente aus dem angegebenen Wörterbuch in ein neues Hashtable Objekt kopiert werden. Das neue Hashtable Objekt verfügt über eine anfängliche Kapazität, die der Anzahl der kopierten Elemente entspricht, und verwendet den Standardladefaktor und das angegebene IEqualityComparer Objekt. |
| Hashtable(Int32) |
Initialisiert eine neue, leere Instanz der Klasse mithilfe der Hashtable angegebenen Anfangskapazität und des Standardlastfaktors, Hashcodeanbieters und Vergleichsmoduls. |
| Hashtable(IEqualityComparer) |
Initialisiert eine neue, leere Instanz der Hashtable Klasse unter Verwendung der Standard-Anfangskapazität und des Lastfaktors und des angegebenen IEqualityComparer Objekts. |
| Hashtable(IDictionary) |
Initialisiert eine neue Instanz der Hashtable Klasse, indem die Elemente aus dem angegebenen Wörterbuch in das neue Hashtable Objekt kopiert werden. Das neue Hashtable Objekt verfügt über eine anfängliche Kapazität, die der Anzahl der kopierten Elemente entspricht, und verwendet den Standardladefaktor, den Hashcodeanbieter und den Vergleich. |
| Hashtable(Int32, IEqualityComparer) |
Initialisiert eine neue, leere Instanz der Klasse mithilfe der Hashtable angegebenen Anfangskapazität und IEqualityComparerdes Standardlastfaktors. |
Hashtable()
Initialisiert eine neue, leere Instanz der Hashtable Klasse mithilfe der Standardkapazität, des Ladefaktors, des Hashcodeanbieters und des Vergleichs.
public:
Hashtable();
public Hashtable();
Public Sub New ()
Beispiele
Im folgenden Codebeispiel werden Hashtabellen mit unterschiedlichen Hashtable Konstruktoren erstellt und die Unterschiede im Verhalten der Hashtabellen veranschaulicht, auch wenn jeder die gleichen Elemente enthält.
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
Hinweise
Die Kapazität einer Hashtabelle wird verwendet, um die optimale Anzahl von Hashtabellen-Buckets basierend auf dem Ladefaktor zu berechnen. Die Kapazität wird bei Bedarf automatisch erhöht.
Der Ladefaktor ist das maximale Verhältnis von Elementen zu Buckets. Ein kleinerer Ladefaktor bedeutet einen schnelleren Blick auf die Kosten einer erhöhten Arbeitsspeicherauslastung.
Wenn der tatsächliche Ladefaktor den angegebenen Ladefaktor erreicht, wird die Anzahl der Buckets automatisch auf die kleinste Prime-Zahl erhöht, die größer als doppelt die aktuelle Anzahl von Buckets ist.
Der Hashcodeanbieter gibt Hashcodes für Schlüssel im Hashtable Objekt aus. Der Standardmäßige Hashcodeanbieter ist die Implementierung des Object.GetHashCodeSchlüssels.
Der Vergleich bestimmt, ob zwei Schlüssel gleich sind. Jeder Schlüssel in einem Hashtable muss eindeutig sein. Der Standardvergleich ist die Implementierung des Object.EqualsSchlüssels.
Dieser Konstruktor ist ein O(1) Vorgang.
Weitere Informationen
Gilt für:
Hashtable(Int32, Single, IHashCodeProvider, IComparer)
Achtung
Please use Hashtable(int, float, IEqualityComparer) instead.
Initialisiert eine neue, leere Instanz der Hashtable Klasse mithilfe der angegebenen Anfangskapazität, des Ladefaktors, des Hashcodeanbieters und des Vergleichs.
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)
Parameter
- capacity
- Int32
Die ungefähre Anzahl der Elemente, die das Hashtable Objekt anfänglich enthalten kann.
- loadFactor
- Single
Eine Zahl im Bereich von 0,1 bis 1,0, die mit dem Standardwert multipliziert wird, der die beste Leistung bietet. Das Ergebnis ist das maximale Verhältnis von Elementen zu Buckets.
Das IHashCodeProvider Objekt, das die Hashcodes für alle Schlüssel in der .Hashtable
-oder-
null um den Standardmäßigen Hashcodeanbieter zu verwenden, bei dem es sich um die Implementierung GetHashCode()jedes Schlüssels handelt.
- comparer
- IComparer
Das IComparer Objekt, das verwendet werden soll, um zu bestimmen, ob zwei Schlüssel gleich sind.
-oder-
null um den Standard-Comparer zu verwenden, bei dem es sich um die Implementierung Equals(Object)der einzelnen Schlüssel handelt.
- Attribute
Ausnahmen
capacity ist kleiner als 0 (null).
-oder-
loadFactor ist kleiner als 0,1.
-oder-
loadFactor ist größer als 1,0.
Hinweise
Wenn Sie die anfängliche Kapazität angeben, müssen Sie beim Hinzufügen von Elementen zum Hashtable Objekt eine Reihe von Größenänderungsvorgängen ausführen. Die Kapazität wird basierend auf dem Lastfaktor automatisch je nach Bedarf erhöht.
Der Ladefaktor ist das maximale Verhältnis von Elementen zu Buckets. Ein kleinerer Ladefaktor bedeutet einen schnelleren Blick auf die Kosten einer erhöhten Arbeitsspeicherauslastung. Ein Lastfaktor von 1,0 ist das beste Gleichgewicht zwischen Geschwindigkeit und Größe.
Wenn der tatsächliche Ladefaktor den angegebenen Ladefaktor erreicht, wird die Anzahl der Buckets automatisch auf die kleinste Prime-Zahl erhöht, die größer als doppelt die aktuelle Anzahl von Buckets ist.
Der Hashcodeanbieter gibt Hashcodes für Schlüssel in der Hashtable. Der Standardmäßige Hashcodeanbieter ist die Implementierung des Object.GetHashCodeSchlüssels.
Der Vergleich bestimmt, ob zwei Schlüssel gleich sind. Jeder Schlüssel in einem Hashtable muss eindeutig sein. Der Standardvergleich ist die Implementierung des Object.EqualsSchlüssels.
Der benutzerdefinierte Hashcodeanbieter und der benutzerdefinierte Vergleich aktivieren Szenarien, z. B. Nachschlagevorgänge mit Zeichenfolgen ohne Groß-/Kleinschreibung.
Dieser Konstruktor ist ein O(n) Vorgang, bei dem n es sich um den capacity Parameter handelt.
Weitere Informationen
Gilt für:
Hashtable(IDictionary, Single, IHashCodeProvider, IComparer)
Achtung
Please use Hashtable(IDictionary, float, IEqualityComparer) instead.
Initialisiert eine neue Instanz der Hashtable Klasse, indem die Elemente aus dem angegebenen Wörterbuch in das neue Hashtable Objekt kopiert werden. Das neue Hashtable Objekt verfügt über eine anfängliche Kapazität, die der Anzahl der kopierten Elemente entspricht, und verwendet den angegebenen Ladefaktor, den Hashcodeanbieter und den Vergleich.
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)
Parameter
Das IDictionary Objekt, das in ein neues Hashtable Objekt kopiert werden soll.
- loadFactor
- Single
Eine Zahl im Bereich von 0,1 bis 1,0, die mit dem Standardwert multipliziert wird, der die beste Leistung bietet. Das Ergebnis ist das maximale Verhältnis von Elementen zu Buckets.
Das IHashCodeProvider Objekt, das die Hashcodes für alle Schlüssel in der .Hashtable
-oder-
null um den Standardmäßigen Hashcodeanbieter zu verwenden, bei dem es sich um die Implementierung GetHashCode()jedes Schlüssels handelt.
- comparer
- IComparer
Das IComparer Objekt, das verwendet werden soll, um zu bestimmen, ob zwei Schlüssel gleich sind.
-oder-
null um den Standard-Comparer zu verwenden, bei dem es sich um die Implementierung Equals(Object)der einzelnen Schlüssel handelt.
- Attribute
Ausnahmen
d ist null.
Hinweise
Die anfängliche Kapazität wird auf die Anzahl der Elemente im Quellwörterbuch festgelegt. Die Kapazität wird basierend auf dem Lastfaktor automatisch je nach Bedarf erhöht.
Der Ladefaktor ist das maximale Verhältnis von Elementen zu Buckets. Ein kleinerer Ladefaktor bedeutet einen schnelleren Blick auf die Kosten einer erhöhten Arbeitsspeicherauslastung. Ein Lastfaktor von 1,0 ist das beste Gleichgewicht zwischen Geschwindigkeit und Größe.
Wenn der tatsächliche Ladefaktor den angegebenen Ladefaktor erreicht, wird die Anzahl der Buckets automatisch auf die kleinste Prime-Zahl erhöht, die größer als doppelt die aktuelle Anzahl von Buckets ist.
Der Hashcodeanbieter gibt Hashcodes für Schlüssel im Hashtable Objekt aus. Der Standardmäßige Hashcodeanbieter ist die Implementierung des Object.GetHashCodeSchlüssels.
Der Vergleich bestimmt, ob zwei Schlüssel gleich sind. Jeder Schlüssel in einem Hashtable muss eindeutig sein. Der Standardvergleich ist die Implementierung des Object.EqualsSchlüssels.
Der benutzerdefinierte Hashcodeanbieter und der benutzerdefinierte Vergleich aktivieren Szenarien, z. B. Nachschlagevorgänge mit Zeichenfolgen ohne Groß-/Kleinschreibung.
Die Elemente des Neuen Hashtable werden in derselben Reihenfolge sortiert, in der der Enumerator das IDictionary Objekt durchläuft.
Dieser Konstruktor ist ein O(n) Vorgang, wobei n es sich um die Anzahl der Elemente im d Parameter handelt.
Gilt für:
Hashtable(Int32, Single, IEqualityComparer)
Initialisiert eine neue, leere Instanz der Hashtable Klasse mithilfe der angegebenen Anfangskapazität, des Ladefaktors und IEqualityComparer des Objekts.
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)
Parameter
- capacity
- Int32
Die ungefähre Anzahl der Elemente, die das Hashtable Objekt anfänglich enthalten kann.
- loadFactor
- Single
Eine Zahl im Bereich von 0,1 bis 1,0, die mit dem Standardwert multipliziert wird, der die beste Leistung bietet. Das Ergebnis ist das maximale Verhältnis von Elementen zu Buckets.
- equalityComparer
- IEqualityComparer
Das IEqualityComparer Objekt, das den Hashcodeanbieter und den Vergleich definiert, der mit der Hashtable.
-oder-
null um den Standardmäßigen Hashcodeanbieter und den Standardvergleich zu verwenden. Der Standardmäßige Hashcodeanbieter ist die Implementierung jedes GetHashCode() Schlüssels, und der Standardvergleich ist die Implementierung jedes Equals(Object)Schlüssels.
Ausnahmen
capacity ist kleiner als 0 (null).
-oder-
loadFactor ist kleiner als 0,1.
-oder-
loadFactor ist größer als 1,0.
Beispiele
Im folgenden Codebeispiel werden Hashtabellen mit unterschiedlichen Hashtable Konstruktoren erstellt und die Unterschiede im Verhalten der Hashtabellen veranschaulicht, auch wenn jeder die gleichen Elemente enthält.
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
Hinweise
Wenn Sie die anfängliche Kapazität angeben, müssen Sie beim Hinzufügen von Elementen zum Hashtable Objekt eine Reihe von Größenänderungsvorgängen ausführen. Die Kapazität wird basierend auf dem Lastfaktor automatisch je nach Bedarf erhöht.
Der Ladefaktor ist das maximale Verhältnis von Elementen zu Buckets. Ein kleinerer Ladefaktor bedeutet einen schnelleren Blick auf die Kosten einer erhöhten Arbeitsspeicherauslastung. Ein Lastfaktor von 1,0 ist das beste Gleichgewicht zwischen Geschwindigkeit und Größe.
Wenn der tatsächliche Ladefaktor den angegebenen Ladefaktor erreicht, wird die Anzahl der Buckets automatisch auf die kleinste Prime-Zahl erhöht, die größer als doppelt die aktuelle Anzahl von Buckets ist.
Das IEqualityComparer Objekt enthält sowohl den Hashcodeanbieter als auch den Comparer. Wenn ein IEqualityComparer Objekt im Hashtable Konstruktor verwendet wird, müssen die objekte, die als Schlüssel in der Hashtable Konstruktor verwendet werden, nicht außer Kraft setzen.Object.GetHashCodeObject.Equals
Der Hashcodeanbieter gibt Hashcodes für Schlüssel in der Hashtable. Der Standardmäßige Hashcodeanbieter ist die Implementierung des Object.GetHashCodeSchlüssels.
Der Vergleich bestimmt, ob zwei Schlüssel gleich sind. Jeder Schlüssel in einem Hashtable muss eindeutig sein. Der Standardvergleich ist die Implementierung des Object.EqualsSchlüssels.
Dies IEqualityComparer ermöglicht Szenarien wie das Ausführen von Nachschlagevorgängen mit Zeichenfolgen, bei denen die Groß-/Kleinschreibung nicht beachtet wird.
Dieser Konstruktor ist ein O(n) Vorgang, bei dem n es sich um den capacity Parameter handelt.
Weitere Informationen
Gilt für:
Hashtable(Int32, IHashCodeProvider, IComparer)
Achtung
Please use Hashtable(int, IEqualityComparer) instead.
Initialisiert eine neue, leere Instanz der Klasse mithilfe der Hashtable angegebenen Anfangskapazität, des Hashcodeanbieters, des Vergleichs und des Standardlastfaktors.
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)
Parameter
- capacity
- Int32
Die ungefähre Anzahl der Elemente, die das Hashtable Objekt anfänglich enthalten kann.
Das IHashCodeProvider Objekt, das die Hashcodes für alle Schlüssel in der .Hashtable
-oder-
null um den Standardmäßigen Hashcodeanbieter zu verwenden, bei dem es sich um die Implementierung GetHashCode()jedes Schlüssels handelt.
- comparer
- IComparer
Das IComparer Objekt, das verwendet werden soll, um zu bestimmen, ob zwei Schlüssel gleich sind.
-oder-
null um den Standard-Comparer zu verwenden, bei dem es sich um die Implementierung Equals(Object)der einzelnen Schlüssel handelt.
- Attribute
Ausnahmen
capacity ist kleiner als 0 (null).
Hinweise
Wenn Sie die anfängliche Kapazität angeben, müssen Sie beim Hinzufügen von Elementen zum Hashtable Objekt eine Reihe von Größenänderungsvorgängen ausführen. Die Kapazität wird basierend auf dem Lastfaktor automatisch je nach Bedarf erhöht.
Der Ladefaktor ist das maximale Verhältnis von Elementen zu Buckets. Ein kleinerer Ladefaktor bedeutet einen schnelleren Blick auf die Kosten einer erhöhten Arbeitsspeicherauslastung.
Wenn der tatsächliche Ladefaktor den angegebenen Ladefaktor erreicht, wird die Anzahl der Buckets automatisch auf die kleinste Prime-Zahl erhöht, die größer als doppelt die aktuelle Anzahl von Buckets ist.
Der Hashcodeanbieter gibt Hashcodes für Schlüssel in der Hashtable. Der Standardmäßige Hashcodeanbieter ist die Implementierung des Object.GetHashCodeSchlüssels.
Der Vergleich bestimmt, ob zwei Schlüssel gleich sind. Jeder Schlüssel in einem Hashtable muss eindeutig sein. Der Standardvergleich ist die Implementierung des Object.EqualsSchlüssels.
Der benutzerdefinierte Hashcodeanbieter und der benutzerdefinierte Vergleich aktivieren Szenarien, z. B. Nachschlagevorgänge mit Zeichenfolgen ohne Groß-/Kleinschreibung.
Dieser Konstruktor ist ein O(n) Vorgang, bei dem n es sich um den capacity Parameter handelt.
Weitere Informationen
Gilt für:
Hashtable(IDictionary, Single, IEqualityComparer)
Initialisiert eine neue Instanz der Hashtable Klasse, indem die Elemente aus dem angegebenen Wörterbuch in das neue Hashtable Objekt kopiert werden. Das neue Hashtable Objekt verfügt über eine anfängliche Kapazität, die der Anzahl der kopierten Elemente entspricht, und verwendet den angegebenen Ladefaktor und IEqualityComparer das angegebene Objekt.
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)
Parameter
Das IDictionary Objekt, das in ein neues Hashtable Objekt kopiert werden soll.
- loadFactor
- Single
Eine Zahl im Bereich von 0,1 bis 1,0, die mit dem Standardwert multipliziert wird, der die beste Leistung bietet. Das Ergebnis ist das maximale Verhältnis von Elementen zu Buckets.
- equalityComparer
- IEqualityComparer
Das IEqualityComparer Objekt, das den Hashcodeanbieter und den Vergleich definiert, der mit der Hashtable.
-oder-
null um den Standardmäßigen Hashcodeanbieter und den Standardvergleich zu verwenden. Der Standardmäßige Hashcodeanbieter ist die Implementierung jedes GetHashCode() Schlüssels, und der Standardvergleich ist die Implementierung jedes Equals(Object)Schlüssels.
Ausnahmen
d ist null.
Beispiele
Im folgenden Codebeispiel werden Hashtabellen mit unterschiedlichen Hashtable Konstruktoren erstellt und die Unterschiede im Verhalten der Hashtabellen veranschaulicht, auch wenn jeder die gleichen Elemente enthält.
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
Hinweise
Die anfängliche Kapazität wird auf die Anzahl der Elemente im Quellwörterbuch festgelegt. Die Kapazität wird basierend auf dem Lastfaktor automatisch je nach Bedarf erhöht.
Der Ladefaktor ist das maximale Verhältnis von Elementen zu Buckets. Ein kleinerer Ladefaktor bedeutet einen schnelleren Blick auf die Kosten einer erhöhten Arbeitsspeicherauslastung. Ein Lastfaktor von 1,0 ist das beste Gleichgewicht zwischen Geschwindigkeit und Größe.
Wenn der tatsächliche Ladefaktor den angegebenen Ladefaktor erreicht, wird die Anzahl der Buckets automatisch auf die kleinste Prime-Zahl erhöht, die größer als doppelt die aktuelle Anzahl von Buckets ist.
Das IEqualityComparer Objekt enthält sowohl den Hashcodeanbieter als auch den Comparer. Wenn ein IEqualityComparer Objekt im Hashtable Konstruktor verwendet wird, müssen die Objekte, die als Schlüssel im Hashtable Objekt verwendet werden, nicht außer Kraft setzen.Object.GetHashCodeObject.Equals
Der Hashcodeanbieter gibt Hashcodes für Schlüssel in der Hashtable. Der Standardmäßige Hashcodeanbieter ist die Implementierung des Object.GetHashCodeSchlüssels.
Der Vergleich bestimmt, ob zwei Schlüssel gleich sind. Jeder Schlüssel in einem Hashtable muss eindeutig sein. Der Standardvergleich ist die Implementierung des Object.EqualsSchlüssels.
Dies IEqualityComparer ermöglicht Szenarien wie das Ausführen von Nachschlagevorgängen mit Zeichenfolgen, bei denen die Groß-/Kleinschreibung nicht beachtet wird.
Die Elemente des Neuen Hashtable werden in derselben Reihenfolge sortiert, in der der Enumerator das IDictionary Objekt durchläuft.
Dieser Konstruktor ist ein O(n) Vorgang, wobei n es sich um die Anzahl der Elemente im d Parameter handelt.
Weitere Informationen
Gilt für:
Hashtable(IDictionary, IHashCodeProvider, IComparer)
Achtung
Please use Hashtable(IDictionary, IEqualityComparer) instead.
Initialisiert eine neue Instanz der Hashtable Klasse, indem die Elemente aus dem angegebenen Wörterbuch in das neue Hashtable Objekt kopiert werden. Das neue Hashtable Objekt verfügt über eine anfängliche Kapazität, die der Anzahl der kopierten Elemente entspricht, und verwendet den Standardladefaktor und den angegebenen Hashcodeanbieter und -vergleicher. Diese API ist veraltet. Eine Alternative finden Sie unter 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)
Parameter
Das IDictionary Objekt, das in ein neues Hashtable Objekt kopiert werden soll.
Das IHashCodeProvider Objekt, das die Hashcodes für alle Schlüssel in der .Hashtable
-oder-
null um den Standardmäßigen Hashcodeanbieter zu verwenden, bei dem es sich um die Implementierung GetHashCode()jedes Schlüssels handelt.
- comparer
- IComparer
Das IComparer Objekt, das verwendet werden soll, um zu bestimmen, ob zwei Schlüssel gleich sind.
-oder-
null um den Standard-Comparer zu verwenden, bei dem es sich um die Implementierung Equals(Object)der einzelnen Schlüssel handelt.
- Attribute
Ausnahmen
d ist null.
Hinweise
Die anfängliche Kapazität wird auf die Anzahl der Elemente im Quellwörterbuch festgelegt. Die Kapazität wird basierend auf dem Lastfaktor automatisch je nach Bedarf erhöht.
Der Ladefaktor ist das maximale Verhältnis von Elementen zu Buckets. Ein kleinerer Ladefaktor bedeutet einen schnelleren Blick auf die Kosten einer erhöhten Arbeitsspeicherauslastung.
Wenn der tatsächliche Ladefaktor den angegebenen Ladefaktor erreicht, wird die Anzahl der Buckets automatisch auf die kleinste Prime-Zahl erhöht, die größer als doppelt die aktuelle Anzahl von Buckets ist.
Der Hashcodeanbieter gibt Hashcodes für Schlüssel im Hashtable Objekt aus. Der Standardmäßige Hashcodeanbieter ist die Implementierung des Object.GetHashCodeSchlüssels.
Der Vergleich bestimmt, ob zwei Schlüssel gleich sind. Jeder Schlüssel in einem Hashtable muss eindeutig sein. Der Standardvergleich ist die Implementierung des Object.EqualsSchlüssels.
Der benutzerdefinierte Hashcodeanbieter und der benutzerdefinierte Vergleich aktivieren Szenarien, z. B. Nachschlagevorgänge mit Zeichenfolgen ohne Groß-/Kleinschreibung.
Die Elemente des Neuen Hashtable werden in derselben Reihenfolge sortiert, in der der Enumerator das IDictionary Objekt durchläuft.
Dieser Konstruktor ist ein O(n) Vorgang, wobei n es sich um die Anzahl der Elemente im d Parameter handelt.
Weitere Informationen
Gilt für:
Hashtable(Int32, Single)
Initialisiert eine neue, leere Instanz der Hashtable Klasse mithilfe des angegebenen Anfangskapazitäts- und Ladefaktors und des Standardmäßigen Hashcodeanbieters und -vergleichs.
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)
Parameter
- capacity
- Int32
Die ungefähre Anzahl der Elemente, die das Hashtable Objekt anfänglich enthalten kann.
- loadFactor
- Single
Eine Zahl im Bereich von 0,1 bis 1,0, die mit dem Standardwert multipliziert wird, der die beste Leistung bietet. Das Ergebnis ist das maximale Verhältnis von Elementen zu Buckets.
Ausnahmen
capacity ist kleiner als 0 (null).
-oder-
loadFactor ist kleiner als 0,1.
-oder-
loadFactor ist größer als 1,0.
capacity verursacht einen Überlauf.
Beispiele
Im folgenden Codebeispiel werden Hashtabellen mit unterschiedlichen Hashtable Konstruktoren erstellt und die Unterschiede im Verhalten der Hashtabellen veranschaulicht, auch wenn jeder die gleichen Elemente enthält.
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
Hinweise
Wenn Sie die anfängliche Kapazität angeben, müssen Sie beim Hinzufügen von Elementen zum Hashtable Objekt eine Reihe von Größenänderungsvorgängen ausführen. Die Kapazität wird basierend auf dem Lastfaktor automatisch je nach Bedarf erhöht.
Der Ladefaktor ist das maximale Verhältnis von Elementen zu Buckets. Ein kleinerer Ladefaktor bedeutet einen schnelleren Blick auf die Kosten einer erhöhten Arbeitsspeicherauslastung. Ein Lastfaktor von 1,0 ist das beste Gleichgewicht zwischen Geschwindigkeit und Größe.
Wenn der tatsächliche Ladefaktor den angegebenen Ladefaktor erreicht, wird die Anzahl der Buckets automatisch auf die kleinste Prime-Zahl erhöht, die größer als doppelt die aktuelle Anzahl von Buckets ist.
Der Hashcodeanbieter gibt Hashcodes für Schlüssel in der Hashtable. Der Standardmäßige Hashcodeanbieter ist die Implementierung des Object.GetHashCodeSchlüssels.
Der Vergleich bestimmt, ob zwei Schlüssel gleich sind. Jeder Schlüssel in einem Hashtable muss eindeutig sein. Der Standardvergleich ist die Implementierung des Object.EqualsSchlüssels.
Dieser Konstruktor ist ein O(n) Vorgang, bei dem n es sich um den capacity Parameter handelt.
Weitere Informationen
Gilt für:
Hashtable(SerializationInfo, StreamingContext)
Initialisiert eine neue, leere Instanz der Klasse, die mithilfe der Hashtable angegebenen SerializationInfo Objekte StreamingContext serialisierbar ist.
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)
Parameter
- info
- SerializationInfo
Ein SerializationInfo Objekt, das die zum Serialisieren des Hashtable Objekts erforderlichen Informationen enthält.
- context
- StreamingContext
Ein StreamingContext Objekt, das die Quelle und das Ziel des serialisierten Datenstroms enthält, der dem Hashtablezugeordnet ist.
Ausnahmen
info ist null.
Hinweise
Die Kapazität einer Hashtabelle wird verwendet, um die optimale Anzahl von Hashtabellen-Buckets basierend auf dem Ladefaktor zu berechnen. Die Kapazität wird bei Bedarf automatisch erhöht.
Der Ladefaktor ist das maximale Verhältnis von Elementen zu Buckets. Ein kleinerer Ladefaktor bedeutet einen schnelleren Blick auf die Kosten einer erhöhten Arbeitsspeicherauslastung.
Wenn der tatsächliche Ladefaktor den angegebenen Ladefaktor erreicht, wird die Anzahl der Buckets automatisch auf die kleinste Prime-Zahl erhöht, die größer als doppelt die aktuelle Anzahl von Buckets ist.
Der Hashcodeanbieter gibt Hashcodes für Schlüssel im Hashtable Objekt aus. Der Standardmäßige Hashcodeanbieter ist die Implementierung des Object.GetHashCodeSchlüssels.
Der Vergleich bestimmt, ob zwei Schlüssel gleich sind. Jeder Schlüssel in einem Hashtable muss eindeutig sein. Der Standardvergleich ist die Implementierung des Object.EqualsSchlüssels.
Dieser Konstruktor ist ein Vorgang, bei dem O(n) es sich um einen n Vorgang handeltCount.
Da die Serialisierung und Deserialisierung eines Enumerators für ein Hashtable Element dazu führen kann, dass die Elemente neu angeordnet werden, ist es nicht möglich, die Enumeration fortzusetzen, ohne die Reset Methode aufzurufen.
Weitere Informationen
- ISerializable
- SerializationInfo
- StreamingContext
- OnDeserialization(Object)
- GetHashCode()
- Equals(Object)
Gilt für:
Hashtable(IHashCodeProvider, IComparer)
Achtung
Please use Hashtable(IEqualityComparer) instead.
Initialisiert eine neue, leere Instanz der Hashtable Klasse unter Verwendung des Standard-Anfangskapazitäts- und Lastfaktors und des angegebenen Hashcodeanbieters und -vergleichs.
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)
Parameter
Das IHashCodeProvider Objekt, das die Hashcodes für alle Schlüssel im Hashtable Objekt bereitstellt.
-oder-
null um den Standardmäßigen Hashcodeanbieter zu verwenden, bei dem es sich um die Implementierung GetHashCode()jedes Schlüssels handelt.
- comparer
- IComparer
Das IComparer Objekt, das verwendet werden soll, um zu bestimmen, ob zwei Schlüssel gleich sind.
-oder-
null um den Standard-Comparer zu verwenden, bei dem es sich um die Implementierung Equals(Object)der einzelnen Schlüssel handelt.
- Attribute
Hinweise
Die Kapazität einer Hashtabelle wird verwendet, um die optimale Anzahl von Hashtabellen-Buckets basierend auf dem Ladefaktor zu berechnen. Die Kapazität wird bei Bedarf automatisch erhöht.
Der Ladefaktor ist das maximale Verhältnis von Elementen zu Buckets. Ein kleinerer Ladefaktor bedeutet einen schnelleren Blick auf die Kosten einer erhöhten Arbeitsspeicherauslastung.
Wenn der tatsächliche Ladefaktor den angegebenen Ladefaktor erreicht, wird die Anzahl der Buckets automatisch auf die kleinste Prime-Zahl erhöht, die größer als doppelt die aktuelle Anzahl von Buckets ist.
Der Hashcodeanbieter gibt Hashcodes für Schlüssel im Hashtable Objekt aus. Der Standardmäßige Hashcodeanbieter ist die Implementierung des Object.GetHashCodeSchlüssels.
Der Vergleich bestimmt, ob zwei Schlüssel gleich sind. Jeder Schlüssel in einem Hashtable muss eindeutig sein. Der Standardvergleich ist die Implementierung des Object.EqualsSchlüssels.
Der benutzerdefinierte Hashcodeanbieter und der benutzerdefinierte Vergleich aktivieren Szenarien, z. B. Nachschlagevorgänge mit Zeichenfolgen ohne Groß-/Kleinschreibung.
Dieser Konstruktor ist ein O(1) Vorgang.
Weitere Informationen
Gilt für:
Hashtable(IDictionary, Single)
Initialisiert eine neue Instanz der Hashtable Klasse, indem die Elemente aus dem angegebenen Wörterbuch in das neue Hashtable Objekt kopiert werden. Das neue Hashtable Objekt verfügt über eine anfängliche Kapazität, die der Anzahl der kopierten Elemente entspricht, und verwendet den angegebenen Ladefaktor sowie den Standardhashcodeanbieter und -vergleicher.
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)
Parameter
Das IDictionary Objekt, das in ein neues Hashtable Objekt kopiert werden soll.
- loadFactor
- Single
Eine Zahl im Bereich von 0,1 bis 1,0, die mit dem Standardwert multipliziert wird, der die beste Leistung bietet. Das Ergebnis ist das maximale Verhältnis von Elementen zu Buckets.
Ausnahmen
d ist null.
Beispiele
Im folgenden Codebeispiel werden Hashtabellen mit unterschiedlichen Hashtable Konstruktoren erstellt und die Unterschiede im Verhalten der Hashtabellen veranschaulicht, auch wenn jeder die gleichen Elemente enthält.
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
Hinweise
Die anfängliche Kapazität wird auf die Anzahl der Elemente im Quellwörterbuch festgelegt. Die Kapazität wird basierend auf dem Lastfaktor automatisch je nach Bedarf erhöht.
Der Ladefaktor ist das maximale Verhältnis von Elementen zu Buckets. Ein kleinerer Ladefaktor bedeutet einen schnelleren Blick auf die Kosten einer erhöhten Arbeitsspeicherauslastung. Ein Lastfaktor von 1,0 ist das beste Gleichgewicht zwischen Geschwindigkeit und Größe.
Wenn der tatsächliche Ladefaktor den angegebenen Ladefaktor erreicht, wird die Anzahl der Buckets automatisch auf die kleinste Prime-Zahl erhöht, die größer als doppelt die aktuelle Anzahl von Buckets ist.
Der Hashcodeanbieter gibt Hashcodes für Schlüssel im Hashtable Objekt aus. Der Standardmäßige Hashcodeanbieter ist die Implementierung des Object.GetHashCodeSchlüssels.
Der Vergleich bestimmt, ob zwei Schlüssel gleich sind. Jeder Schlüssel in einem Hashtable muss eindeutig sein. Der Standardvergleich ist die Implementierung des Object.EqualsSchlüssels.
Die Elemente des Neuen Hashtable werden in derselben Reihenfolge sortiert, in der der Enumerator das IDictionary Objekt durchläuft.
Dieser Konstruktor ist ein O(n) Vorgang, wobei n es sich um die Anzahl der Elemente im d Parameter handelt.
Weitere Informationen
Gilt für:
Hashtable(IDictionary, IEqualityComparer)
Initialisiert eine neue Instanz der Hashtable Klasse, indem die Elemente aus dem angegebenen Wörterbuch in ein neues Hashtable Objekt kopiert werden. Das neue Hashtable Objekt verfügt über eine anfängliche Kapazität, die der Anzahl der kopierten Elemente entspricht, und verwendet den Standardladefaktor und das angegebene IEqualityComparer Objekt.
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)
Parameter
Das IDictionary Objekt, das in ein neues Hashtable Objekt kopiert werden soll.
- equalityComparer
- IEqualityComparer
Das IEqualityComparer Objekt, das den Hashcodeanbieter und den Vergleich definiert, der mit der Hashtable.
-oder-
null um den Standardmäßigen Hashcodeanbieter und den Standardvergleich zu verwenden. Der Standardmäßige Hashcodeanbieter ist die Implementierung jedes GetHashCode() Schlüssels, und der Standardvergleich ist die Implementierung jedes Equals(Object)Schlüssels.
Ausnahmen
d ist null.
Beispiele
Im folgenden Codebeispiel werden Hashtabellen mit unterschiedlichen Hashtable Konstruktoren erstellt und die Unterschiede im Verhalten der Hashtabellen veranschaulicht, auch wenn jeder die gleichen Elemente enthält.
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
Hinweise
Die anfängliche Kapazität wird auf die Anzahl der Elemente im Quellwörterbuch festgelegt. Die Kapazität wird basierend auf dem Lastfaktor automatisch je nach Bedarf erhöht.
Der Ladefaktor ist das maximale Verhältnis von Elementen zu Buckets. Ein kleinerer Ladefaktor bedeutet einen schnelleren Blick auf die Kosten einer erhöhten Arbeitsspeicherauslastung.
Wenn der tatsächliche Ladefaktor den angegebenen Ladefaktor erreicht, wird die Anzahl der Buckets automatisch auf die kleinste Prime-Zahl erhöht, die größer als doppelt die aktuelle Anzahl von Buckets ist.
Das IEqualityComparer Objekt enthält sowohl den Hashcodeanbieter als auch den Comparer. Wenn ein IEqualityComparer Objekt im Hashtable Konstruktor verwendet wird, müssen die Objekte, die als Schlüssel im Hashtable Objekt verwendet werden, nicht außer Kraft setzen.Object.GetHashCodeObject.Equals
Der Hashcodeanbieter gibt Hashcodes für Schlüssel in der Hashtable. Der Standardmäßige Hashcodeanbieter ist die Implementierung des Object.GetHashCodeSchlüssels.
Der Vergleich bestimmt, ob zwei Schlüssel gleich sind. Jeder Schlüssel in einem Hashtable muss eindeutig sein. Der Standardvergleich ist die Implementierung des Object.EqualsSchlüssels.
Dies IEqualityComparer ermöglicht Szenarien wie das Ausführen von Nachschlagevorgängen mit Zeichenfolgen, bei denen die Groß-/Kleinschreibung nicht beachtet wird.
Die Elemente des Neuen Hashtable werden in derselben Reihenfolge sortiert, in der der Enumerator das IDictionary Objekt durchläuft.
Dieser Konstruktor ist ein O(n) Vorgang, wobei n es sich um die Anzahl der Elemente im d Parameter handelt.
Weitere Informationen
Gilt für:
Hashtable(Int32)
Initialisiert eine neue, leere Instanz der Klasse mithilfe der Hashtable angegebenen Anfangskapazität und des Standardlastfaktors, Hashcodeanbieters und Vergleichsmoduls.
public:
Hashtable(int capacity);
public Hashtable(int capacity);
new System.Collections.Hashtable : int -> System.Collections.Hashtable
Public Sub New (capacity As Integer)
Parameter
- capacity
- Int32
Die ungefähre Anzahl der Elemente, die das Hashtable Objekt anfänglich enthalten kann.
Ausnahmen
capacity ist kleiner als 0 (null).
Beispiele
Im folgenden Codebeispiel werden Hashtabellen mit unterschiedlichen Hashtable Konstruktoren erstellt und die Unterschiede im Verhalten der Hashtabellen veranschaulicht, auch wenn jeder die gleichen Elemente enthält.
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
Hinweise
Wenn Sie die anfängliche Kapazität angeben, müssen Sie beim Hinzufügen von Elementen zum Hashtable Objekt eine Reihe von Größenänderungsvorgängen ausführen. Die Kapazität wird basierend auf dem Lastfaktor automatisch je nach Bedarf erhöht.
Der Ladefaktor ist das maximale Verhältnis von Elementen zu Buckets. Ein kleinerer Ladefaktor bedeutet einen schnelleren Blick auf die Kosten einer erhöhten Arbeitsspeicherauslastung.
Wenn der tatsächliche Ladefaktor den angegebenen Ladefaktor erreicht, wird die Anzahl der Buckets automatisch auf die kleinste Prime-Zahl erhöht, die größer als doppelt die aktuelle Anzahl von Buckets ist.
Der Hashcodeanbieter gibt Hashcodes für Schlüssel in der Hashtable. Der Standardmäßige Hashcodeanbieter ist die Implementierung des Object.GetHashCodeSchlüssels.
Der Vergleich bestimmt, ob zwei Schlüssel gleich sind. Jeder Schlüssel in einem Hashtable muss eindeutig sein. Der Standardvergleich ist die Implementierung des Object.EqualsSchlüssels.
Dieser Konstruktor ist ein Vorgang, bei dem O(n) es sich um einen n Vorgang handeltcapacity.
Weitere Informationen
Gilt für:
Hashtable(IEqualityComparer)
Initialisiert eine neue, leere Instanz der Hashtable Klasse unter Verwendung der Standard-Anfangskapazität und des Lastfaktors und des angegebenen IEqualityComparer Objekts.
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)
Parameter
- equalityComparer
- IEqualityComparer
Das IEqualityComparer Objekt, das den Hashcodeanbieter und den Vergleich definiert, der mit dem Hashtable Objekt verwendet werden soll.
-oder-
null um den Standardmäßigen Hashcodeanbieter und den Standardvergleich zu verwenden. Der Standardmäßige Hashcodeanbieter ist die Implementierung jedes GetHashCode() Schlüssels, und der Standardvergleich ist die Implementierung jedes Equals(Object)Schlüssels.
Beispiele
Im folgenden Codebeispiel werden Hashtabellen mit unterschiedlichen Hashtable Konstruktoren erstellt und die Unterschiede im Verhalten der Hashtabellen veranschaulicht, auch wenn jeder die gleichen Elemente enthält.
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
Hinweise
Die Kapazität einer Hashtabelle wird verwendet, um die optimale Anzahl von Hashtabellen-Buckets basierend auf dem Ladefaktor zu berechnen. Die Kapazität wird bei Bedarf automatisch erhöht.
Der Ladefaktor ist das maximale Verhältnis von Elementen zu Buckets. Ein kleinerer Ladefaktor bedeutet einen schnelleren Blick auf die Kosten einer erhöhten Arbeitsspeicherauslastung.
Wenn der tatsächliche Ladefaktor den angegebenen Ladefaktor erreicht, wird die Anzahl der Buckets automatisch auf die kleinste Prime-Zahl erhöht, die größer als doppelt die aktuelle Anzahl von Buckets ist.
Das IEqualityComparer Objekt enthält sowohl den Hashcodeanbieter als auch den Comparer. Wenn ein IEqualityComparer Objekt im Hashtable Konstruktor verwendet wird, müssen die Objekte, die als Schlüssel im Hashtable Objekt verwendet werden, nicht außer Kraft setzen.Object.GetHashCodeObject.Equals
Der Hashcodeanbieter gibt Hashcodes für Schlüssel in der Hashtable. Der Standardmäßige Hashcodeanbieter ist die Implementierung des Object.GetHashCodeSchlüssels.
Der Vergleich bestimmt, ob zwei Schlüssel gleich sind. Jeder Schlüssel in einem Hashtable muss eindeutig sein. Der Standardvergleich ist die Implementierung des Object.EqualsSchlüssels.
Dies IEqualityComparer ermöglicht Szenarien wie das Ausführen von Nachschlagevorgängen mit Zeichenfolgen, bei denen die Groß-/Kleinschreibung nicht beachtet wird.
Dieser Konstruktor ist ein O(1) Vorgang.
Weitere Informationen
Gilt für:
Hashtable(IDictionary)
Initialisiert eine neue Instanz der Hashtable Klasse, indem die Elemente aus dem angegebenen Wörterbuch in das neue Hashtable Objekt kopiert werden. Das neue Hashtable Objekt verfügt über eine anfängliche Kapazität, die der Anzahl der kopierten Elemente entspricht, und verwendet den Standardladefaktor, den Hashcodeanbieter und den Vergleich.
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)
Parameter
Das IDictionary Objekt, das in ein neues Hashtable Objekt kopiert werden soll.
Ausnahmen
d ist null.
Beispiele
Im folgenden Codebeispiel werden Hashtabellen mit unterschiedlichen Hashtable Konstruktoren erstellt und die Unterschiede im Verhalten der Hashtabellen veranschaulicht, auch wenn jeder die gleichen Elemente enthält.
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
Hinweise
Die anfängliche Kapazität wird auf die Anzahl der Elemente im Quellwörterbuch festgelegt. Die Kapazität wird basierend auf dem Lastfaktor automatisch je nach Bedarf erhöht.
Der Ladefaktor ist das maximale Verhältnis von Elementen zu Buckets. Ein kleinerer Ladefaktor bedeutet einen schnelleren Blick auf die Kosten einer erhöhten Arbeitsspeicherauslastung.
Wenn der tatsächliche Ladefaktor den angegebenen Ladefaktor erreicht, wird die Anzahl der Buckets automatisch auf die kleinste Prime-Zahl erhöht, die größer als doppelt die aktuelle Anzahl von Buckets ist.
Der Hashcodeanbieter gibt Hashcodes für Schlüssel im Hashtable Objekt aus. Der Standardmäßige Hashcodeanbieter ist die Implementierung des Object.GetHashCodeSchlüssels.
Der Vergleich bestimmt, ob zwei Schlüssel gleich sind. Jeder Schlüssel in einem Hashtable muss eindeutig sein. Der Standardvergleich ist die Implementierung des Object.EqualsSchlüssels.
Die Elemente des Neuen Hashtable werden in derselben Reihenfolge sortiert, in der der Enumerator das IDictionary Objekt durchläuft.
Dieser Konstruktor ist ein O(n) Vorgang, wobei n es sich um die Anzahl der Elemente im d Parameter handelt.
Weitere Informationen
Gilt für:
Hashtable(Int32, IEqualityComparer)
Initialisiert eine neue, leere Instanz der Klasse mithilfe der Hashtable angegebenen Anfangskapazität und IEqualityComparerdes Standardlastfaktors.
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)
Parameter
- capacity
- Int32
Die ungefähre Anzahl der Elemente, die das Hashtable Objekt anfänglich enthalten kann.
- equalityComparer
- IEqualityComparer
Das IEqualityComparer Objekt, das den Hashcodeanbieter und den Vergleich definiert, der mit der Hashtable.
-oder-
null um den Standardmäßigen Hashcodeanbieter und den Standardvergleich zu verwenden. Der Standardmäßige Hashcodeanbieter ist die Implementierung jedes GetHashCode() Schlüssels, und der Standardvergleich ist die Implementierung jedes Equals(Object)Schlüssels.
Ausnahmen
capacity ist kleiner als 0 (null).
Beispiele
Im folgenden Codebeispiel werden Hashtabellen mit unterschiedlichen Hashtable Konstruktoren erstellt und die Unterschiede im Verhalten der Hashtabellen veranschaulicht, auch wenn jeder die gleichen Elemente enthält.
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
Hinweise
Wenn Sie die anfängliche Kapazität angeben, müssen Sie beim Hinzufügen von Elementen zum Hashtable Objekt eine Reihe von Größenänderungsvorgängen ausführen. Die Kapazität wird basierend auf dem Lastfaktor automatisch je nach Bedarf erhöht.
Der Ladefaktor ist das maximale Verhältnis von Elementen zu Buckets. Ein kleinerer Ladefaktor bedeutet einen schnelleren Blick auf die Kosten einer erhöhten Arbeitsspeicherauslastung.
Wenn der tatsächliche Ladefaktor den angegebenen Ladefaktor erreicht, wird die Anzahl der Buckets automatisch auf die kleinste Prime-Zahl erhöht, die größer als doppelt die aktuelle Anzahl von Buckets ist.
Das IEqualityComparer Objekt enthält sowohl den Hashcodeanbieter als auch den Comparer. Wenn ein IEqualityComparer Objekt im Hashtable Konstruktor verwendet wird, müssen die objekte, die als Schlüssel in der Hashtable Konstruktor verwendet werden, nicht außer Kraft setzen.Object.GetHashCodeObject.Equals
Der Hashcodeanbieter gibt Hashcodes für Schlüssel in der Hashtable. Der Standardmäßige Hashcodeanbieter ist die Implementierung des Object.GetHashCodeSchlüssels.
Der Vergleich bestimmt, ob zwei Schlüssel gleich sind. Jeder Schlüssel in einem Hashtable muss eindeutig sein. Der Standardvergleich ist die Implementierung des Object.EqualsSchlüssels.
Dies IEqualityComparer ermöglicht Szenarien wie das Ausführen von Nachschlagevorgängen mit Zeichenfolgen, bei denen die Groß-/Kleinschreibung nicht beachtet wird.
Dieser Konstruktor ist ein O(n) Vorgang, bei dem n es sich um den capacity Parameter handelt.