Hashtable Costruttori

Definizione

Inizializza una nuova istanza della classe Hashtable.

Overload

Nome Descrizione
Hashtable()

Inizializza una nuova istanza vuota della Hashtable classe utilizzando la capacità iniziale predefinita, il fattore di carico, il provider di codice hash e l'operatore di confronto.

Hashtable(Int32, Single, IHashCodeProvider, IComparer)
Obsoleti.
Obsoleti.

Inizializza una nuova istanza vuota della Hashtable classe utilizzando la capacità iniziale, il fattore di carico, il provider di codice hash e l'operatore di confronto specificati.

Hashtable(IDictionary, Single, IHashCodeProvider, IComparer)
Obsoleti.
Obsoleti.

Inizializza una nuova istanza della Hashtable classe copiando gli elementi dal dizionario specificato al nuovo Hashtable oggetto . Il nuovo Hashtable oggetto ha una capacità iniziale uguale al numero di elementi copiati e usa il fattore di carico, il provider di codice hash e l'operatore di confronto specificati.

Hashtable(Int32, Single, IEqualityComparer)

Inizializza una nuova istanza vuota della Hashtable classe utilizzando la capacità iniziale, il fattore di carico e IEqualityComparer l'oggetto specificati.

Hashtable(Int32, IHashCodeProvider, IComparer)
Obsoleti.
Obsoleti.

Inizializza una nuova istanza vuota della Hashtable classe utilizzando la capacità iniziale specificata, il provider di codice hash, l'operatore di confronto e il fattore di carico predefinito.

Hashtable(IDictionary, Single, IEqualityComparer)

Inizializza una nuova istanza della Hashtable classe copiando gli elementi dal dizionario specificato al nuovo Hashtable oggetto . Il nuovo Hashtable oggetto ha una capacità iniziale uguale al numero di elementi copiati e usa il fattore di carico e IEqualityComparer l'oggetto specificati.

Hashtable(IDictionary, IHashCodeProvider, IComparer)
Obsoleti.
Obsoleti.

Inizializza una nuova istanza della Hashtable classe copiando gli elementi dal dizionario specificato al nuovo Hashtable oggetto . Il nuovo Hashtable oggetto ha una capacità iniziale uguale al numero di elementi copiati e usa il fattore di carico predefinito e il provider di codice hash e l'operatore di confronto specificati. Questa API è obsoleta. Per un'alternativa, vedere Hashtable(IDictionary, IEqualityComparer).

Hashtable(Int32, Single)

Inizializza una nuova istanza vuota della Hashtable classe utilizzando la capacità iniziale e il fattore di carico specificati e il provider di codice hash predefinito e l'operatore di confronto.

Hashtable(SerializationInfo, StreamingContext)
Obsoleti.

Inizializza una nuova istanza vuota della Hashtable classe serializzabile utilizzando gli oggetti e SerializationInfo specificatiStreamingContext.

Hashtable(IHashCodeProvider, IComparer)
Obsoleti.
Obsoleti.
Obsoleti.

Inizializza una nuova istanza vuota della Hashtable classe utilizzando la capacità iniziale predefinita e il fattore di carico e il provider di codice hash e l'operatore di confronto specificati.

Hashtable(IDictionary, Single)

Inizializza una nuova istanza della Hashtable classe copiando gli elementi dal dizionario specificato al nuovo Hashtable oggetto . Il nuovo Hashtable oggetto ha una capacità iniziale uguale al numero di elementi copiati e usa il fattore di carico specificato e il provider di codice hash predefinito e l'operatore di confronto.

Hashtable(IDictionary, IEqualityComparer)

Inizializza una nuova istanza della Hashtable classe copiando gli elementi dal dizionario specificato in un nuovo Hashtable oggetto . Il nuovo Hashtable oggetto ha una capacità iniziale uguale al numero di elementi copiati e usa il fattore di carico predefinito e l'oggetto specificato IEqualityComparer .

Hashtable(Int32)

Inizializza una nuova istanza vuota della Hashtable classe utilizzando la capacità iniziale specificata e il fattore di carico predefinito, il provider di codice hash e l'operatore di confronto.

Hashtable(IEqualityComparer)

Inizializza una nuova istanza vuota della Hashtable classe utilizzando la capacità iniziale predefinita e il fattore di carico e l'oggetto specificato IEqualityComparer .

Hashtable(IDictionary)

Inizializza una nuova istanza della Hashtable classe copiando gli elementi dal dizionario specificato al nuovo Hashtable oggetto . Il nuovo Hashtable oggetto ha una capacità iniziale uguale al numero di elementi copiati e usa il fattore di carico predefinito, il provider di codice hash e l'operatore di confronto.

Hashtable(Int32, IEqualityComparer)

Inizializza una nuova istanza vuota della Hashtable classe utilizzando la capacità iniziale specificata e IEqualityComparere il fattore di carico predefinito.

Hashtable()

Origine:
Hashtable.cs
Origine:
Hashtable.cs
Origine:
Hashtable.cs
Origine:
Hashtable.cs
Origine:
Hashtable.cs

Inizializza una nuova istanza vuota della Hashtable classe utilizzando la capacità iniziale predefinita, il fattore di carico, il provider di codice hash e l'operatore di confronto.

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

Esempio

Nell'esempio di codice seguente vengono create tabelle hash usando costruttori diversi Hashtable e vengono illustrate le differenze nel comportamento delle tabelle hash, anche se ognuna contiene gli stessi elementi.

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

Commenti

La capacità di una tabella hash viene usata per calcolare il numero ottimale di bucket di tabelle hash in base al fattore di carico. La capacità viene aumentata automaticamente in base alle esigenze.

Il fattore di carico è il rapporto massimo tra elementi e bucket. Un fattore di carico più piccolo implica una ricerca più rapida a causa del costo dell'aumento del consumo di memoria.

Quando il fattore di carico effettivo raggiunge il fattore di carico specificato, il numero di bucket viene automaticamente aumentato al numero primo più piccolo maggiore del doppio del numero corrente di bucket.

Il provider di codice hash distribuisce i codici hash per le chiavi nell'oggetto Hashtable . Il provider di codice hash predefinito è l'implementazione della chiave di Object.GetHashCode.

L'operatore di confronto determina se due chiavi sono uguali. Ogni chiave in un Hashtable deve essere univoca. L'operatore di confronto predefinito è l'implementazione della chiave di Object.Equals.

Questo costruttore è un'operazione O(1) .

Vedi anche

Si applica a

Hashtable(Int32, Single, IHashCodeProvider, IComparer)

Origine:
Hashtable.cs
Origine:
Hashtable.cs
Origine:
Hashtable.cs
Origine:
Hashtable.cs
Origine:
Hashtable.cs

Attenzione

This constructor has been deprecated. Use Hashtable(int, float, IEqualityComparer) instead.

Attenzione

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

Inizializza una nuova istanza vuota della Hashtable classe utilizzando la capacità iniziale, il fattore di carico, il provider di codice hash e l'operatore di confronto specificati.

public:
 Hashtable(int capacity, float loadFactor, System::Collections::IHashCodeProvider ^ hcp, System::Collections::IComparer ^ comparer);
[System.Obsolete("This constructor has been deprecated. Use Hashtable(int, float, IEqualityComparer) instead.")]
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);
[System.Obsolete("Please use Hashtable(int, float, IEqualityComparer) instead.")]
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("This constructor has been deprecated. Use Hashtable(int, float, IEqualityComparer) instead.")>]
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
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)

Parametri

capacity
Int32

Numero approssimativo di elementi che l'oggetto Hashtable può inizialmente contenere.

loadFactor
Single

Numero compreso nell'intervallo compreso tra 0,1 e 1,0 moltiplicato per il valore predefinito che offre le migliori prestazioni. Il risultato è il rapporto massimo tra elementi e bucket.

hcp
IHashCodeProvider

Oggetto IHashCodeProvider che fornisce i codici hash per tutte le chiavi in Hashtable.

oppure

null per usare il provider di codice hash predefinito, ovvero l'implementazione di ogni chiave di GetHashCode().

comparer
IComparer

Oggetto IComparer da utilizzare per determinare se due chiavi sono uguali.

oppure

null per usare l'operatore di confronto predefinito, ovvero l'implementazione di ogni chiave di Equals(Object).

Attributi

Eccezioni

capacity è minore di zero.

oppure

loadFactor è minore di 0,1.

oppure

loadFactor è maggiore di 1,0.

Commenti

La specifica della capacità iniziale elimina la necessità di eseguire una serie di operazioni di ridimensionamento durante l'aggiunta di elementi all'oggetto Hashtable . La capacità viene aumentata automaticamente in base al fattore di carico richiesto.

Il fattore di carico è il rapporto massimo tra elementi e bucket. Un fattore di carico più piccolo implica una ricerca più rapida a causa del costo dell'aumento del consumo di memoria. Un fattore di carico di 1,0 è il miglior equilibrio tra velocità e dimensioni.

Quando il fattore di carico effettivo raggiunge il fattore di carico specificato, il numero di bucket viene automaticamente aumentato al numero primo più piccolo maggiore del doppio del numero corrente di bucket.

Il provider di codice hash distribuisce i codici hash per le chiavi in Hashtable. Il provider di codice hash predefinito è l'implementazione della chiave di Object.GetHashCode.

L'operatore di confronto determina se due chiavi sono uguali. Ogni chiave in un Hashtable deve essere univoca. L'operatore di confronto predefinito è l'implementazione della chiave di Object.Equals.

Il provider di codice hash personalizzato e l'operatore di confronto personalizzato abilitano scenari come l'operazione di ricerca con stringhe senza distinzione tra maiuscole e minuscole.

Questo costruttore è un'operazione O(n) , dove n è il capacity parametro .

Vedi anche

Si applica a

Hashtable(IDictionary, Single, IHashCodeProvider, IComparer)

Origine:
Hashtable.cs
Origine:
Hashtable.cs
Origine:
Hashtable.cs
Origine:
Hashtable.cs
Origine:
Hashtable.cs

Attenzione

This constructor has been deprecated. Use Hashtable(IDictionary, float, IEqualityComparer) instead.

Attenzione

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

Inizializza una nuova istanza della Hashtable classe copiando gli elementi dal dizionario specificato al nuovo Hashtable oggetto . Il nuovo Hashtable oggetto ha una capacità iniziale uguale al numero di elementi copiati e usa il fattore di carico, il provider di codice hash e l'operatore di confronto specificati.

public:
 Hashtable(System::Collections::IDictionary ^ d, float loadFactor, System::Collections::IHashCodeProvider ^ hcp, System::Collections::IComparer ^ comparer);
[System.Obsolete("This constructor has been deprecated. Use Hashtable(IDictionary, float, IEqualityComparer) instead.")]
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);
[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);
public Hashtable(System.Collections.IDictionary d, float loadFactor, System.Collections.IHashCodeProvider hcp, System.Collections.IComparer comparer);
[<System.Obsolete("This constructor has been deprecated. Use Hashtable(IDictionary, float, IEqualityComparer) instead.")>]
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
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)

Parametri

d
IDictionary

Oggetto IDictionary da copiare in un nuovo Hashtable oggetto.

loadFactor
Single

Numero compreso nell'intervallo compreso tra 0,1 e 1,0 moltiplicato per il valore predefinito che offre le migliori prestazioni. Il risultato è il rapporto massimo tra elementi e bucket.

hcp
IHashCodeProvider

Oggetto IHashCodeProvider che fornisce i codici hash per tutte le chiavi in Hashtable.

oppure

null per usare il provider di codice hash predefinito, ovvero l'implementazione di ogni chiave di GetHashCode().

comparer
IComparer

Oggetto IComparer da utilizzare per determinare se due chiavi sono uguali.

oppure

null per usare l'operatore di confronto predefinito, ovvero l'implementazione di ogni chiave di Equals(Object).

Attributi

Eccezioni

loadFactor è minore di 0,1.

oppure

loadFactor è maggiore di 1,0.

Commenti

La capacità iniziale viene impostata sul numero di elementi nel dizionario di origine. La capacità viene aumentata automaticamente in base al fattore di carico richiesto.

Il fattore di carico è il rapporto massimo tra elementi e bucket. Un fattore di carico più piccolo implica una ricerca più rapida a causa del costo dell'aumento del consumo di memoria. Un fattore di carico di 1,0 è il miglior equilibrio tra velocità e dimensioni.

Quando il fattore di carico effettivo raggiunge il fattore di carico specificato, il numero di bucket viene automaticamente aumentato al numero primo più piccolo maggiore del doppio del numero corrente di bucket.

Il provider di codice hash distribuisce i codici hash per le chiavi nell'oggetto Hashtable . Il provider di codice hash predefinito è l'implementazione della chiave di Object.GetHashCode.

L'operatore di confronto determina se due chiavi sono uguali. Ogni chiave in un Hashtable deve essere univoca. L'operatore di confronto predefinito è l'implementazione della chiave di Object.Equals.

Il provider di codice hash personalizzato e l'operatore di confronto personalizzato abilitano scenari come l'operazione di ricerca con stringhe senza distinzione tra maiuscole e minuscole.

Gli elementi del nuovo Hashtable vengono ordinati nello stesso ordine in cui l'enumeratore scorre l'oggetto IDictionary .

Questo costruttore è un'operazione O(n) , dove n è il numero di elementi nel d parametro .

Si applica a

Hashtable(Int32, Single, IEqualityComparer)

Origine:
Hashtable.cs
Origine:
Hashtable.cs
Origine:
Hashtable.cs
Origine:
Hashtable.cs
Origine:
Hashtable.cs

Inizializza una nuova istanza vuota della Hashtable classe utilizzando la capacità iniziale, il fattore di carico e IEqualityComparer l'oggetto specificati.

public:
 Hashtable(int capacity, float loadFactor, System::Collections::IEqualityComparer ^ equalityComparer);
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)

Parametri

capacity
Int32

Numero approssimativo di elementi che l'oggetto Hashtable può inizialmente contenere.

loadFactor
Single

Numero compreso nell'intervallo compreso tra 0,1 e 1,0 moltiplicato per il valore predefinito che offre le migliori prestazioni. Il risultato è il rapporto massimo tra elementi e bucket.

equalityComparer
IEqualityComparer

Oggetto IEqualityComparer che definisce il provider di codice hash e l'operatore di confronto da usare con .Hashtable

oppure

null per usare il provider di codice hash predefinito e l'operatore di confronto predefinito. Il provider di codice hash predefinito è l'implementazione di ogni chiave di GetHashCode() e l'operatore di confronto predefinito è l'implementazione di ogni chiave di Equals(Object).

Eccezioni

capacity è minore di zero.

oppure

loadFactor è minore di 0,1.

oppure

loadFactor è maggiore di 1,0.

Esempio

Nell'esempio di codice seguente vengono create tabelle hash usando costruttori diversi Hashtable e vengono illustrate le differenze nel comportamento delle tabelle hash, anche se ognuna contiene gli stessi elementi.

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

Commenti

La specifica della capacità iniziale elimina la necessità di eseguire una serie di operazioni di ridimensionamento durante l'aggiunta di elementi all'oggetto Hashtable . La capacità viene aumentata automaticamente in base al fattore di carico richiesto.

Il fattore di carico è il rapporto massimo tra elementi e bucket. Un fattore di carico più piccolo implica una ricerca più rapida a causa del costo dell'aumento del consumo di memoria. Un fattore di carico di 1,0 è il miglior equilibrio tra velocità e dimensioni.

Quando il fattore di carico effettivo raggiunge il fattore di carico specificato, il numero di bucket viene automaticamente aumentato al numero primo più piccolo maggiore del doppio del numero corrente di bucket.

L'oggetto IEqualityComparer include sia il provider di codice hash che l'operatore di confronto. IEqualityComparer Se un oggetto viene utilizzato nel Hashtable costruttore, gli oggetti utilizzati come chiavi in non sono necessari per eseguire l'override Hashtable dei Object.GetHashCode metodi e Object.Equals .

Il provider di codice hash distribuisce i codici hash per le chiavi in Hashtable. Il provider di codice hash predefinito è l'implementazione della chiave di Object.GetHashCode.

L'operatore di confronto determina se due chiavi sono uguali. Ogni chiave in un Hashtable deve essere univoca. L'operatore di confronto predefinito è l'implementazione della chiave di Object.Equals.

IEqualityComparer Abilita scenari come l'operazione di ricerca con stringhe senza distinzione tra maiuscole e minuscole.

Questo costruttore è un'operazione O(n) , dove n è il capacity parametro .

Vedi anche

Si applica a

Hashtable(Int32, IHashCodeProvider, IComparer)

Origine:
Hashtable.cs
Origine:
Hashtable.cs
Origine:
Hashtable.cs
Origine:
Hashtable.cs
Origine:
Hashtable.cs

Attenzione

This constructor has been deprecated. Use Hashtable(int, IEqualityComparer) instead.

Attenzione

Please use Hashtable(int, IEqualityComparer) instead.

Inizializza una nuova istanza vuota della Hashtable classe utilizzando la capacità iniziale specificata, il provider di codice hash, l'operatore di confronto e il fattore di carico predefinito.

public:
 Hashtable(int capacity, System::Collections::IHashCodeProvider ^ hcp, System::Collections::IComparer ^ comparer);
[System.Obsolete("This constructor has been deprecated. Use Hashtable(int, IEqualityComparer) instead.")]
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);
[System.Obsolete("Please use Hashtable(int, IEqualityComparer) instead.")]
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("This constructor has been deprecated. Use Hashtable(int, IEqualityComparer) instead.")>]
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
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)

Parametri

capacity
Int32

Numero approssimativo di elementi che l'oggetto Hashtable può inizialmente contenere.

hcp
IHashCodeProvider

Oggetto IHashCodeProvider che fornisce i codici hash per tutte le chiavi in Hashtable.

oppure

null per usare il provider di codice hash predefinito, ovvero l'implementazione di ogni chiave di GetHashCode().

comparer
IComparer

Oggetto IComparer da utilizzare per determinare se due chiavi sono uguali.

oppure

null per usare l'operatore di confronto predefinito, ovvero l'implementazione di ogni chiave di Equals(Object).

Attributi

Eccezioni

capacity è minore di zero.

Commenti

La specifica della capacità iniziale elimina la necessità di eseguire una serie di operazioni di ridimensionamento durante l'aggiunta di elementi all'oggetto Hashtable . La capacità viene aumentata automaticamente in base al fattore di carico richiesto.

Il fattore di carico è il rapporto massimo tra elementi e bucket. Un fattore di carico più piccolo implica una ricerca più rapida a causa del costo dell'aumento del consumo di memoria.

Quando il fattore di carico effettivo raggiunge il fattore di carico specificato, il numero di bucket viene automaticamente aumentato al numero primo più piccolo maggiore del doppio del numero corrente di bucket.

Il provider di codice hash distribuisce i codici hash per le chiavi in Hashtable. Il provider di codice hash predefinito è l'implementazione della chiave di Object.GetHashCode.

L'operatore di confronto determina se due chiavi sono uguali. Ogni chiave in un Hashtable deve essere univoca. L'operatore di confronto predefinito è l'implementazione della chiave di Object.Equals.

Il provider di codice hash personalizzato e l'operatore di confronto personalizzato abilitano scenari come l'operazione di ricerca con stringhe senza distinzione tra maiuscole e minuscole.

Questo costruttore è un'operazione O(n) , dove n è il capacity parametro .

Vedi anche

Si applica a

Hashtable(IDictionary, Single, IEqualityComparer)

Origine:
Hashtable.cs
Origine:
Hashtable.cs
Origine:
Hashtable.cs
Origine:
Hashtable.cs
Origine:
Hashtable.cs

Inizializza una nuova istanza della Hashtable classe copiando gli elementi dal dizionario specificato al nuovo Hashtable oggetto . Il nuovo Hashtable oggetto ha una capacità iniziale uguale al numero di elementi copiati e usa il fattore di carico e IEqualityComparer l'oggetto specificati.

public:
 Hashtable(System::Collections::IDictionary ^ d, float loadFactor, System::Collections::IEqualityComparer ^ equalityComparer);
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)

Parametri

d
IDictionary

Oggetto IDictionary da copiare in un nuovo Hashtable oggetto.

loadFactor
Single

Numero compreso nell'intervallo compreso tra 0,1 e 1,0 moltiplicato per il valore predefinito che offre le migliori prestazioni. Il risultato è il rapporto massimo tra elementi e bucket.

equalityComparer
IEqualityComparer

Oggetto IEqualityComparer che definisce il provider di codice hash e l'operatore di confronto da usare con .Hashtable

oppure

null per usare il provider di codice hash predefinito e l'operatore di confronto predefinito. Il provider di codice hash predefinito è l'implementazione di ogni chiave di GetHashCode() e l'operatore di confronto predefinito è l'implementazione di ogni chiave di Equals(Object).

Eccezioni

loadFactor è minore di 0,1.

oppure

loadFactor è maggiore di 1,0.

Esempio

Nell'esempio di codice seguente vengono create tabelle hash usando costruttori diversi Hashtable e vengono illustrate le differenze nel comportamento delle tabelle hash, anche se ognuna contiene gli stessi elementi.

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

Commenti

La capacità iniziale viene impostata sul numero di elementi nel dizionario di origine. La capacità viene aumentata automaticamente in base al fattore di carico richiesto.

Il fattore di carico è il rapporto massimo tra elementi e bucket. Un fattore di carico più piccolo implica una ricerca più rapida a causa del costo dell'aumento del consumo di memoria. Un fattore di carico di 1,0 è il miglior equilibrio tra velocità e dimensioni.

Quando il fattore di carico effettivo raggiunge il fattore di carico specificato, il numero di bucket viene automaticamente aumentato al numero primo più piccolo maggiore del doppio del numero corrente di bucket.

L'oggetto IEqualityComparer include sia il provider di codice hash che l'operatore di confronto. Se un IEqualityComparer oggetto viene utilizzato nel Hashtable costruttore, gli oggetti utilizzati come chiavi nell'oggetto non sono necessari per eseguire l'override Hashtable dei Object.GetHashCode metodi e Object.Equals .

Il provider di codice hash distribuisce i codici hash per le chiavi in Hashtable. Il provider di codice hash predefinito è l'implementazione della chiave di Object.GetHashCode.

L'operatore di confronto determina se due chiavi sono uguali. Ogni chiave in un Hashtable deve essere univoca. L'operatore di confronto predefinito è l'implementazione della chiave di Object.Equals.

IEqualityComparer Abilita scenari come l'operazione di ricerca con stringhe senza distinzione tra maiuscole e minuscole.

Gli elementi del nuovo Hashtable vengono ordinati nello stesso ordine in cui l'enumeratore scorre l'oggetto IDictionary .

Questo costruttore è un'operazione O(n) , dove n è il numero di elementi nel d parametro .

Vedi anche

Si applica a

Hashtable(IDictionary, IHashCodeProvider, IComparer)

Origine:
Hashtable.cs
Origine:
Hashtable.cs
Origine:
Hashtable.cs
Origine:
Hashtable.cs
Origine:
Hashtable.cs

Attenzione

This constructor has been deprecated. Use Hashtable(IDictionary, IEqualityComparer) instead.

Attenzione

Please use Hashtable(IDictionary, IEqualityComparer) instead.

Inizializza una nuova istanza della Hashtable classe copiando gli elementi dal dizionario specificato al nuovo Hashtable oggetto . Il nuovo Hashtable oggetto ha una capacità iniziale uguale al numero di elementi copiati e usa il fattore di carico predefinito e il provider di codice hash e l'operatore di confronto specificati. Questa API è obsoleta. Per un'alternativa, vedere Hashtable(IDictionary, IEqualityComparer).

public:
 Hashtable(System::Collections::IDictionary ^ d, System::Collections::IHashCodeProvider ^ hcp, System::Collections::IComparer ^ comparer);
[System.Obsolete("This constructor has been deprecated. Use Hashtable(IDictionary, IEqualityComparer) instead.")]
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);
[System.Obsolete("Please use Hashtable(IDictionary, IEqualityComparer) instead.")]
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("This constructor has been deprecated. Use Hashtable(IDictionary, IEqualityComparer) instead.")>]
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
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)

Parametri

d
IDictionary

Oggetto IDictionary da copiare in un nuovo Hashtable oggetto.

hcp
IHashCodeProvider

Oggetto IHashCodeProvider che fornisce i codici hash per tutte le chiavi in Hashtable.

oppure

null per usare il provider di codice hash predefinito, ovvero l'implementazione di ogni chiave di GetHashCode().

comparer
IComparer

Oggetto IComparer da utilizzare per determinare se due chiavi sono uguali.

oppure

null per usare l'operatore di confronto predefinito, ovvero l'implementazione di ogni chiave di Equals(Object).

Attributi

Eccezioni

Commenti

La capacità iniziale viene impostata sul numero di elementi nel dizionario di origine. La capacità viene aumentata automaticamente in base al fattore di carico richiesto.

Il fattore di carico è il rapporto massimo tra elementi e bucket. Un fattore di carico più piccolo implica una ricerca più rapida a causa del costo dell'aumento del consumo di memoria.

Quando il fattore di carico effettivo raggiunge il fattore di carico specificato, il numero di bucket viene automaticamente aumentato al numero primo più piccolo maggiore del doppio del numero corrente di bucket.

Il provider di codice hash distribuisce i codici hash per le chiavi nell'oggetto Hashtable . Il provider di codice hash predefinito è l'implementazione della chiave di Object.GetHashCode.

L'operatore di confronto determina se due chiavi sono uguali. Ogni chiave in un Hashtable deve essere univoca. L'operatore di confronto predefinito è l'implementazione della chiave di Object.Equals.

Il provider di codice hash personalizzato e l'operatore di confronto personalizzato abilitano scenari come l'operazione di ricerca con stringhe senza distinzione tra maiuscole e minuscole.

Gli elementi del nuovo Hashtable vengono ordinati nello stesso ordine in cui l'enumeratore scorre l'oggetto IDictionary .

Questo costruttore è un'operazione O(n) , dove n è il numero di elementi nel d parametro .

Vedi anche

Si applica a

Hashtable(Int32, Single)

Origine:
Hashtable.cs
Origine:
Hashtable.cs
Origine:
Hashtable.cs
Origine:
Hashtable.cs
Origine:
Hashtable.cs

Inizializza una nuova istanza vuota della Hashtable classe utilizzando la capacità iniziale e il fattore di carico specificati e il provider di codice hash predefinito e l'operatore di confronto.

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)

Parametri

capacity
Int32

Numero approssimativo di elementi che l'oggetto Hashtable può inizialmente contenere.

loadFactor
Single

Numero compreso nell'intervallo compreso tra 0,1 e 1,0 moltiplicato per il valore predefinito che offre le migliori prestazioni. Il risultato è il rapporto massimo tra elementi e bucket.

Eccezioni

capacity è minore di zero.

oppure

loadFactor è minore di 0,1.

oppure

loadFactor è maggiore di 1,0.

capacity sta causando un overflow.

Esempio

Nell'esempio di codice seguente vengono create tabelle hash usando costruttori diversi Hashtable e vengono illustrate le differenze nel comportamento delle tabelle hash, anche se ognuna contiene gli stessi elementi.

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

Commenti

La specifica della capacità iniziale elimina la necessità di eseguire una serie di operazioni di ridimensionamento durante l'aggiunta di elementi all'oggetto Hashtable . La capacità viene aumentata automaticamente in base al fattore di carico richiesto.

Il fattore di carico è il rapporto massimo tra elementi e bucket. Un fattore di carico più piccolo implica una ricerca più rapida a causa del costo dell'aumento del consumo di memoria. Un fattore di carico di 1,0 è il miglior equilibrio tra velocità e dimensioni.

Quando il fattore di carico effettivo raggiunge il fattore di carico specificato, il numero di bucket viene automaticamente aumentato al numero primo più piccolo maggiore del doppio del numero corrente di bucket.

Il provider di codice hash distribuisce i codici hash per le chiavi in Hashtable. Il provider di codice hash predefinito è l'implementazione della chiave di Object.GetHashCode.

L'operatore di confronto determina se due chiavi sono uguali. Ogni chiave in un Hashtable deve essere univoca. L'operatore di confronto predefinito è l'implementazione della chiave di Object.Equals.

Questo costruttore è un'operazione O(n) , dove n è il capacity parametro .

Vedi anche

Si applica a

Hashtable(SerializationInfo, StreamingContext)

Origine:
Hashtable.cs
Origine:
Hashtable.cs
Origine:
Hashtable.cs
Origine:
Hashtable.cs
Origine:
Hashtable.cs

Attenzione

This API supports obsolete formatter-based serialization. It should not be called or extended by application code.

Inizializza una nuova istanza vuota della Hashtable classe serializzabile utilizzando gli oggetti e SerializationInfo specificatiStreamingContext.

protected:
 Hashtable(System::Runtime::Serialization::SerializationInfo ^ info, System::Runtime::Serialization::StreamingContext context);
[System.Obsolete("This API supports obsolete formatter-based serialization. It should not be called or extended by application code.", DiagnosticId="SYSLIB0051", UrlFormat="https://aka.ms/dotnet-warnings/{0}")]
protected Hashtable(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context);
protected Hashtable(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context);
[<System.Obsolete("This API supports obsolete formatter-based serialization. It should not be called or extended by application code.", DiagnosticId="SYSLIB0051", UrlFormat="https://aka.ms/dotnet-warnings/{0}")>]
new System.Collections.Hashtable : System.Runtime.Serialization.SerializationInfo * System.Runtime.Serialization.StreamingContext -> System.Collections.Hashtable
new System.Collections.Hashtable : System.Runtime.Serialization.SerializationInfo * System.Runtime.Serialization.StreamingContext -> System.Collections.Hashtable
Protected Sub New (info As SerializationInfo, context As StreamingContext)

Parametri

info
SerializationInfo

Oggetto SerializationInfo contenente le informazioni necessarie per serializzare l'oggetto Hashtable .

context
StreamingContext

Oggetto StreamingContext contenente l'origine e la destinazione del flusso serializzato associato all'oggetto Hashtable.

Attributi

Eccezioni

info è null.

Commenti

La capacità di una tabella hash viene usata per calcolare il numero ottimale di bucket di tabelle hash in base al fattore di carico. La capacità viene aumentata automaticamente in base alle esigenze.

Il fattore di carico è il rapporto massimo tra elementi e bucket. Un fattore di carico più piccolo implica una ricerca più rapida a causa del costo dell'aumento del consumo di memoria.

Quando il fattore di carico effettivo raggiunge il fattore di carico specificato, il numero di bucket viene automaticamente aumentato al numero primo più piccolo maggiore del doppio del numero corrente di bucket.

Il provider di codice hash distribuisce i codici hash per le chiavi nell'oggetto Hashtable . Il provider di codice hash predefinito è l'implementazione della chiave di Object.GetHashCode.

L'operatore di confronto determina se due chiavi sono uguali. Ogni chiave in un Hashtable deve essere univoca. L'operatore di confronto predefinito è l'implementazione della chiave di Object.Equals.

Questo costruttore è un'operazione O(n) , dove n è Count.

Poiché la serializzazione e la deserializzazione di un enumeratore per un Hashtable oggetto possono causare la riordinamento degli elementi, non è possibile continuare l'enumerazione senza chiamare il Reset metodo .

Vedi anche

Si applica a

Hashtable(IHashCodeProvider, IComparer)

Origine:
Hashtable.cs
Origine:
Hashtable.cs
Origine:
Hashtable.cs
Origine:
Hashtable.cs
Origine:
Hashtable.cs

Attenzione

This constructor has been deprecated. Use Hashtable(IEqualityComparer) instead.

Attenzione

Please use Hashtable(IEqualityComparer) instead.

Attenzione

This constructor has been deprecated. Use Hashtable(IEqualityComparer).

Inizializza una nuova istanza vuota della Hashtable classe utilizzando la capacità iniziale predefinita e il fattore di carico e il provider di codice hash e l'operatore di confronto specificati.

public:
 Hashtable(System::Collections::IHashCodeProvider ^ hcp, System::Collections::IComparer ^ comparer);
[System.Obsolete("This constructor has been deprecated. Use Hashtable(IEqualityComparer) instead.")]
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);
[System.Obsolete("This constructor has been deprecated. Use Hashtable(IEqualityComparer).")]
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);
public Hashtable(System.Collections.IHashCodeProvider hcp, System.Collections.IComparer comparer);
[<System.Obsolete("This constructor has been deprecated. Use Hashtable(IEqualityComparer) instead.")>]
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
[<System.Obsolete("This constructor has been deprecated. Use Hashtable(IEqualityComparer).")>]
new System.Collections.Hashtable : System.Collections.IHashCodeProvider * System.Collections.IComparer -> System.Collections.Hashtable
new System.Collections.Hashtable : System.Collections.IHashCodeProvider * System.Collections.IComparer -> System.Collections.Hashtable
Public Sub New (hcp As IHashCodeProvider, comparer As IComparer)

Parametri

hcp
IHashCodeProvider

Oggetto IHashCodeProvider che fornisce i codici hash per tutte le chiavi nell'oggetto Hashtable .

oppure

null per usare il provider di codice hash predefinito, ovvero l'implementazione di ogni chiave di GetHashCode().

comparer
IComparer

Oggetto IComparer da utilizzare per determinare se due chiavi sono uguali.

oppure

null per usare l'operatore di confronto predefinito, ovvero l'implementazione di ogni chiave di Equals(Object).

Attributi

Commenti

La capacità di una tabella hash viene usata per calcolare il numero ottimale di bucket di tabelle hash in base al fattore di carico. La capacità viene aumentata automaticamente in base alle esigenze.

Il fattore di carico è il rapporto massimo tra elementi e bucket. Un fattore di carico più piccolo implica una ricerca più rapida a causa del costo dell'aumento del consumo di memoria.

Quando il fattore di carico effettivo raggiunge il fattore di carico specificato, il numero di bucket viene automaticamente aumentato al numero primo più piccolo maggiore del doppio del numero corrente di bucket.

Il provider di codice hash distribuisce i codici hash per le chiavi nell'oggetto Hashtable . Il provider di codice hash predefinito è l'implementazione della chiave di Object.GetHashCode.

L'operatore di confronto determina se due chiavi sono uguali. Ogni chiave in un Hashtable deve essere univoca. L'operatore di confronto predefinito è l'implementazione della chiave di Object.Equals.

Il provider di codice hash personalizzato e l'operatore di confronto personalizzato abilitano scenari come l'operazione di ricerca con stringhe senza distinzione tra maiuscole e minuscole.

Questo costruttore è un'operazione O(1) .

Vedi anche

Si applica a

Hashtable(IDictionary, Single)

Origine:
Hashtable.cs
Origine:
Hashtable.cs
Origine:
Hashtable.cs
Origine:
Hashtable.cs
Origine:
Hashtable.cs

Inizializza una nuova istanza della Hashtable classe copiando gli elementi dal dizionario specificato al nuovo Hashtable oggetto . Il nuovo Hashtable oggetto ha una capacità iniziale uguale al numero di elementi copiati e usa il fattore di carico specificato e il provider di codice hash predefinito e l'operatore di confronto.

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)

Parametri

d
IDictionary

Oggetto IDictionary da copiare in un nuovo Hashtable oggetto.

loadFactor
Single

Numero compreso nell'intervallo compreso tra 0,1 e 1,0 moltiplicato per il valore predefinito che offre le migliori prestazioni. Il risultato è il rapporto massimo tra elementi e bucket.

Eccezioni

loadFactor è minore di 0,1.

oppure

loadFactor è maggiore di 1,0.

Esempio

Nell'esempio di codice seguente vengono create tabelle hash usando costruttori diversi Hashtable e vengono illustrate le differenze nel comportamento delle tabelle hash, anche se ognuna contiene gli stessi elementi.

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

Commenti

La capacità iniziale viene impostata sul numero di elementi nel dizionario di origine. La capacità viene aumentata automaticamente in base al fattore di carico richiesto.

Il fattore di carico è il rapporto massimo tra elementi e bucket. Un fattore di carico più piccolo implica una ricerca più rapida a causa del costo dell'aumento del consumo di memoria. Un fattore di carico di 1,0 è il miglior equilibrio tra velocità e dimensioni.

Quando il fattore di carico effettivo raggiunge il fattore di carico specificato, il numero di bucket viene automaticamente aumentato al numero primo più piccolo maggiore del doppio del numero corrente di bucket.

Il provider di codice hash distribuisce i codici hash per le chiavi nell'oggetto Hashtable . Il provider di codice hash predefinito è l'implementazione della chiave di Object.GetHashCode.

L'operatore di confronto determina se due chiavi sono uguali. Ogni chiave in un Hashtable deve essere univoca. L'operatore di confronto predefinito è l'implementazione della chiave di Object.Equals.

Gli elementi del nuovo Hashtable vengono ordinati nello stesso ordine in cui l'enumeratore scorre l'oggetto IDictionary .

Questo costruttore è un'operazione O(n) , dove n è il numero di elementi nel d parametro .

Vedi anche

Si applica a

Hashtable(IDictionary, IEqualityComparer)

Origine:
Hashtable.cs
Origine:
Hashtable.cs
Origine:
Hashtable.cs
Origine:
Hashtable.cs
Origine:
Hashtable.cs

Inizializza una nuova istanza della Hashtable classe copiando gli elementi dal dizionario specificato in un nuovo Hashtable oggetto . Il nuovo Hashtable oggetto ha una capacità iniziale uguale al numero di elementi copiati e usa il fattore di carico predefinito e l'oggetto specificato IEqualityComparer .

public:
 Hashtable(System::Collections::IDictionary ^ d, System::Collections::IEqualityComparer ^ equalityComparer);
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)

Parametri

d
IDictionary

Oggetto IDictionary da copiare in un nuovo Hashtable oggetto.

equalityComparer
IEqualityComparer

Oggetto IEqualityComparer che definisce il provider di codice hash e l'operatore di confronto da usare con .Hashtable

oppure

null per usare il provider di codice hash predefinito e l'operatore di confronto predefinito. Il provider di codice hash predefinito è l'implementazione di ogni chiave di GetHashCode() e l'operatore di confronto predefinito è l'implementazione di ogni chiave di Equals(Object).

Eccezioni

Esempio

Nell'esempio di codice seguente vengono create tabelle hash usando costruttori diversi Hashtable e vengono illustrate le differenze nel comportamento delle tabelle hash, anche se ognuna contiene gli stessi elementi.

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

Commenti

La capacità iniziale viene impostata sul numero di elementi nel dizionario di origine. La capacità viene aumentata automaticamente in base al fattore di carico richiesto.

Il fattore di carico è il rapporto massimo tra elementi e bucket. Un fattore di carico più piccolo implica una ricerca più rapida a causa del costo dell'aumento del consumo di memoria.

Quando il fattore di carico effettivo raggiunge il fattore di carico specificato, il numero di bucket viene automaticamente aumentato al numero primo più piccolo maggiore del doppio del numero corrente di bucket.

L'oggetto IEqualityComparer include sia il provider di codice hash che l'operatore di confronto. Se un IEqualityComparer oggetto viene utilizzato nel Hashtable costruttore, gli oggetti utilizzati come chiavi nell'oggetto non sono necessari per eseguire l'override Hashtable dei Object.GetHashCode metodi e Object.Equals .

Il provider di codice hash distribuisce i codici hash per le chiavi in Hashtable. Il provider di codice hash predefinito è l'implementazione della chiave di Object.GetHashCode.

L'operatore di confronto determina se due chiavi sono uguali. Ogni chiave in un Hashtable deve essere univoca. L'operatore di confronto predefinito è l'implementazione della chiave di Object.Equals.

IEqualityComparer Abilita scenari come l'operazione di ricerca con stringhe senza distinzione tra maiuscole e minuscole.

Gli elementi del nuovo Hashtable vengono ordinati nello stesso ordine in cui l'enumeratore scorre l'oggetto IDictionary .

Questo costruttore è un'operazione O(n) , dove n è il numero di elementi nel d parametro .

Vedi anche

Si applica a

Hashtable(Int32)

Origine:
Hashtable.cs
Origine:
Hashtable.cs
Origine:
Hashtable.cs
Origine:
Hashtable.cs
Origine:
Hashtable.cs

Inizializza una nuova istanza vuota della Hashtable classe utilizzando la capacità iniziale specificata e il fattore di carico predefinito, il provider di codice hash e l'operatore di confronto.

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

Parametri

capacity
Int32

Numero approssimativo di elementi che l'oggetto Hashtable può inizialmente contenere.

Eccezioni

capacity è minore di zero.

Esempio

Nell'esempio di codice seguente vengono create tabelle hash usando costruttori diversi Hashtable e vengono illustrate le differenze nel comportamento delle tabelle hash, anche se ognuna contiene gli stessi elementi.

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

Commenti

La specifica della capacità iniziale elimina la necessità di eseguire una serie di operazioni di ridimensionamento durante l'aggiunta di elementi all'oggetto Hashtable . La capacità viene aumentata automaticamente in base al fattore di carico richiesto.

Il fattore di carico è il rapporto massimo tra elementi e bucket. Un fattore di carico più piccolo implica una ricerca più rapida a causa del costo dell'aumento del consumo di memoria.

Quando il fattore di carico effettivo raggiunge il fattore di carico specificato, il numero di bucket viene automaticamente aumentato al numero primo più piccolo maggiore del doppio del numero corrente di bucket.

Il provider di codice hash distribuisce i codici hash per le chiavi in Hashtable. Il provider di codice hash predefinito è l'implementazione della chiave di Object.GetHashCode.

L'operatore di confronto determina se due chiavi sono uguali. Ogni chiave in un Hashtable deve essere univoca. L'operatore di confronto predefinito è l'implementazione della chiave di Object.Equals.

Questo costruttore è un'operazione O(n) , dove n è capacity.

Vedi anche

Si applica a

Hashtable(IEqualityComparer)

Origine:
Hashtable.cs
Origine:
Hashtable.cs
Origine:
Hashtable.cs
Origine:
Hashtable.cs
Origine:
Hashtable.cs

Inizializza una nuova istanza vuota della Hashtable classe utilizzando la capacità iniziale predefinita e il fattore di carico e l'oggetto specificato IEqualityComparer .

public:
 Hashtable(System::Collections::IEqualityComparer ^ equalityComparer);
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)

Parametri

equalityComparer
IEqualityComparer

Oggetto IEqualityComparer che definisce il provider di codice hash e l'operatore di confronto da utilizzare con l'oggetto Hashtable .

oppure

null per usare il provider di codice hash predefinito e l'operatore di confronto predefinito. Il provider di codice hash predefinito è l'implementazione di ogni chiave di GetHashCode() e l'operatore di confronto predefinito è l'implementazione di ogni chiave di Equals(Object).

Esempio

Nell'esempio di codice seguente vengono create tabelle hash usando costruttori diversi Hashtable e vengono illustrate le differenze nel comportamento delle tabelle hash, anche se ognuna contiene gli stessi elementi.

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

Commenti

La capacità di una tabella hash viene usata per calcolare il numero ottimale di bucket di tabelle hash in base al fattore di carico. La capacità viene aumentata automaticamente in base alle esigenze.

Il fattore di carico è il rapporto massimo tra elementi e bucket. Un fattore di carico più piccolo implica una ricerca più rapida a causa del costo dell'aumento del consumo di memoria.

Quando il fattore di carico effettivo raggiunge il fattore di carico specificato, il numero di bucket viene automaticamente aumentato al numero primo più piccolo maggiore del doppio del numero corrente di bucket.

L'oggetto IEqualityComparer include sia il provider di codice hash che l'operatore di confronto. Se un IEqualityComparer oggetto viene utilizzato nel Hashtable costruttore, gli oggetti utilizzati come chiavi nell'oggetto non sono necessari per eseguire l'override Hashtable dei Object.GetHashCode metodi e Object.Equals .

Il provider di codice hash distribuisce i codici hash per le chiavi in Hashtable. Il provider di codice hash predefinito è l'implementazione della chiave di Object.GetHashCode.

L'operatore di confronto determina se due chiavi sono uguali. Ogni chiave in un Hashtable deve essere univoca. L'operatore di confronto predefinito è l'implementazione della chiave di Object.Equals.

IEqualityComparer Abilita scenari come l'operazione di ricerca con stringhe senza distinzione tra maiuscole e minuscole.

Questo costruttore è un'operazione O(1) .

Vedi anche

Si applica a

Hashtable(IDictionary)

Origine:
Hashtable.cs
Origine:
Hashtable.cs
Origine:
Hashtable.cs
Origine:
Hashtable.cs
Origine:
Hashtable.cs

Inizializza una nuova istanza della Hashtable classe copiando gli elementi dal dizionario specificato al nuovo Hashtable oggetto . Il nuovo Hashtable oggetto ha una capacità iniziale uguale al numero di elementi copiati e usa il fattore di carico predefinito, il provider di codice hash e l'operatore di confronto.

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)

Parametri

d
IDictionary

Oggetto IDictionary da copiare in un nuovo Hashtable oggetto.

Eccezioni

Esempio

Nell'esempio di codice seguente vengono create tabelle hash usando costruttori diversi Hashtable e vengono illustrate le differenze nel comportamento delle tabelle hash, anche se ognuna contiene gli stessi elementi.

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

Commenti

La capacità iniziale viene impostata sul numero di elementi nel dizionario di origine. La capacità viene aumentata automaticamente in base al fattore di carico richiesto.

Il fattore di carico è il rapporto massimo tra elementi e bucket. Un fattore di carico più piccolo implica una ricerca più rapida a causa del costo dell'aumento del consumo di memoria.

Quando il fattore di carico effettivo raggiunge il fattore di carico specificato, il numero di bucket viene automaticamente aumentato al numero primo più piccolo maggiore del doppio del numero corrente di bucket.

Il provider di codice hash distribuisce i codici hash per le chiavi nell'oggetto Hashtable . Il provider di codice hash predefinito è l'implementazione della chiave di Object.GetHashCode.

L'operatore di confronto determina se due chiavi sono uguali. Ogni chiave in un Hashtable deve essere univoca. L'operatore di confronto predefinito è l'implementazione della chiave di Object.Equals.

Gli elementi del nuovo Hashtable vengono ordinati nello stesso ordine in cui l'enumeratore scorre l'oggetto IDictionary .

Questo costruttore è un'operazione O(n) , dove n è il numero di elementi nel d parametro .

Vedi anche

Si applica a

Hashtable(Int32, IEqualityComparer)

Origine:
Hashtable.cs
Origine:
Hashtable.cs
Origine:
Hashtable.cs
Origine:
Hashtable.cs
Origine:
Hashtable.cs

Inizializza una nuova istanza vuota della Hashtable classe utilizzando la capacità iniziale specificata e IEqualityComparere il fattore di carico predefinito.

public:
 Hashtable(int capacity, System::Collections::IEqualityComparer ^ equalityComparer);
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)

Parametri

capacity
Int32

Numero approssimativo di elementi che l'oggetto Hashtable può inizialmente contenere.

equalityComparer
IEqualityComparer

Oggetto IEqualityComparer che definisce il provider di codice hash e l'operatore di confronto da usare con .Hashtable

oppure

null per usare il provider di codice hash predefinito e l'operatore di confronto predefinito. Il provider di codice hash predefinito è l'implementazione di ogni chiave di GetHashCode() e l'operatore di confronto predefinito è l'implementazione di ogni chiave di Equals(Object).

Eccezioni

capacity è minore di zero.

Esempio

Nell'esempio di codice seguente vengono create tabelle hash usando costruttori diversi Hashtable e vengono illustrate le differenze nel comportamento delle tabelle hash, anche se ognuna contiene gli stessi elementi.

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

Commenti

La specifica della capacità iniziale elimina la necessità di eseguire una serie di operazioni di ridimensionamento durante l'aggiunta di elementi all'oggetto Hashtable . La capacità viene aumentata automaticamente in base al fattore di carico richiesto.

Il fattore di carico è il rapporto massimo tra elementi e bucket. Un fattore di carico più piccolo implica una ricerca più rapida a causa del costo dell'aumento del consumo di memoria.

Quando il fattore di carico effettivo raggiunge il fattore di carico specificato, il numero di bucket viene automaticamente aumentato al numero primo più piccolo maggiore del doppio del numero corrente di bucket.

L'oggetto IEqualityComparer include sia il provider di codice hash che l'operatore di confronto. IEqualityComparer Se un oggetto viene utilizzato nel Hashtable costruttore, gli oggetti utilizzati come chiavi in non sono necessari per eseguire l'override Hashtable dei Object.GetHashCode metodi e Object.Equals .

Il provider di codice hash distribuisce i codici hash per le chiavi in Hashtable. Il provider di codice hash predefinito è l'implementazione della chiave di Object.GetHashCode.

L'operatore di confronto determina se due chiavi sono uguali. Ogni chiave in un Hashtable deve essere univoca. L'operatore di confronto predefinito è l'implementazione della chiave di Object.Equals.

IEqualityComparer Abilita scenari come l'operazione di ricerca con stringhe senza distinzione tra maiuscole e minuscole.

Questo costruttore è un'operazione O(n) , dove n è il capacity parametro .

Vedi anche

Si applica a