Hashtable Construtores

Definição

Inicializa uma nova instância da classe Hashtable.

Sobrecargas

Nome Description
Hashtable()

Inicializa uma nova instância vazia da classe usando a Hashtable capacidade inicial padrão, o fator de carga, o provedor de código de hash e o comparador.

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

Inicializa uma nova instância vazia da Hashtable classe usando a capacidade inicial, o fator de carga, o provedor de código de hash e o comparador especificados.

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

Inicializa uma nova instância da Hashtable classe copiando os elementos do dicionário especificado para o novo Hashtable objeto. O novo Hashtable objeto tem uma capacidade inicial igual ao número de elementos copiados e usa o fator de carga, o provedor de código de hash e o comparador especificados.

Hashtable(Int32, Single, IEqualityComparer)

Inicializa uma nova instância vazia da Hashtable classe usando a capacidade inicial, o fator de carga e IEqualityComparer o objeto especificados.

Hashtable(Int32, IHashCodeProvider, IComparer)
Obsoleto.

Inicializa uma nova instância vazia da Hashtable classe usando a capacidade inicial especificada, o provedor de código de hash, o comparador e o fator de carga padrão.

Hashtable(IDictionary, Single, IEqualityComparer)

Inicializa uma nova instância da Hashtable classe copiando os elementos do dicionário especificado para o novo Hashtable objeto. O novo Hashtable objeto tem uma capacidade inicial igual ao número de elementos copiados e usa o fator de carga e IEqualityComparer o objeto especificados.

Hashtable(IDictionary, IHashCodeProvider, IComparer)
Obsoleto.

Inicializa uma nova instância da Hashtable classe copiando os elementos do dicionário especificado para o novo Hashtable objeto. O novo Hashtable objeto tem uma capacidade inicial igual ao número de elementos copiados e usa o fator de carga padrão e o provedor e o comparador de código hash especificados. Essa API está obsoleta. Para obter uma alternativa, consulte Hashtable(IDictionary, IEqualityComparer).

Hashtable(Int32, Single)

Inicializa uma nova instância vazia da Hashtable classe usando a capacidade inicial especificada e o fator de carga e o provedor de código hash padrão e o comparador.

Hashtable(SerializationInfo, StreamingContext)

Inicializa uma nova instância vazia da Hashtable classe que é serializável usando os objetos especificadosSerializationInfo.StreamingContext

Hashtable(IHashCodeProvider, IComparer)
Obsoleto.

Inicializa uma nova instância vazia da Hashtable classe usando a capacidade inicial padrão e o fator de carga e o provedor de código hash e o comparador especificados.

Hashtable(IDictionary, Single)

Inicializa uma nova instância da Hashtable classe copiando os elementos do dicionário especificado para o novo Hashtable objeto. O novo Hashtable objeto tem uma capacidade inicial igual ao número de elementos copiados e usa o fator de carga especificado e o provedor e o comparador de código hash padrão.

Hashtable(IDictionary, IEqualityComparer)

Inicializa uma nova instância da Hashtable classe copiando os elementos do dicionário especificado para um novo Hashtable objeto. O novo Hashtable objeto tem uma capacidade inicial igual ao número de elementos copiados e usa o fator de carga padrão e o objeto especificado IEqualityComparer .

Hashtable(Int32)

Inicializa uma nova instância vazia da classe usando a Hashtable capacidade inicial especificada e o fator de carga padrão, o provedor de código hash e o comparador.

Hashtable(IEqualityComparer)

Inicializa uma nova instância vazia da Hashtable classe usando a capacidade inicial padrão e o fator de carga e o objeto especificado IEqualityComparer .

Hashtable(IDictionary)

Inicializa uma nova instância da Hashtable classe copiando os elementos do dicionário especificado para o novo Hashtable objeto. O novo Hashtable objeto tem uma capacidade inicial igual ao número de elementos copiados e usa o fator de carga padrão, o provedor de código hash e o comparador.

Hashtable(Int32, IEqualityComparer)

Inicializa uma nova instância vazia da classe usando a Hashtable capacidade inicial especificada e IEqualityComparero fator de carga padrão.

Hashtable()

Inicializa uma nova instância vazia da classe usando a Hashtable capacidade inicial padrão, o fator de carga, o provedor de código de hash e o comparador.

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

Exemplos

O exemplo de código a seguir cria tabelas de hash usando construtores diferentes Hashtable e demonstra as diferenças no comportamento das tabelas de hash, mesmo que cada uma contenha os mesmos elementos.

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

Comentários

A capacidade de uma tabela de hash é usada para calcular o número ideal de buckets de tabela de hash com base no fator de carga. A capacidade é automaticamente aumentada conforme necessário.

O fator de carga é a taxa máxima de elementos para buckets. Um fator de carga menor significa uma pesquisa mais rápida ao custo do aumento do consumo de memória.

Quando o fator de carga real atinge o fator de carga especificado, o número de buckets é automaticamente aumentado para o menor número primo que é maior que o dobro do número atual de buckets.

O provedor de código hash distribui códigos de hash para chaves no Hashtable objeto. O provedor de código hash padrão é a implementação da chave de Object.GetHashCode.

O comparador determina se duas chaves são iguais. Cada chave em uma Hashtable deve ser exclusiva. O comparador padrão é a implementação da chave de Object.Equals.

Este construtor é uma O(1) operação.

Confira também

Aplica-se a

Hashtable(Int32, Single, IHashCodeProvider, IComparer)

Cuidado

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

Inicializa uma nova instância vazia da Hashtable classe usando a capacidade inicial, o fator de carga, o provedor de código de hash e o comparador especificados.

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

Parâmetros

capacity
Int32

O número aproximado de elementos que o Hashtable objeto pode conter inicialmente.

loadFactor
Single

Um número no intervalo de 0,1 a 1,0 multiplicado pelo valor padrão que fornece o melhor desempenho. O resultado é a taxa máxima de elementos para buckets.

hcp
IHashCodeProvider

O IHashCodeProvider objeto que fornece os códigos de hash para todas as chaves no Hashtable.

-ou-

nullpara usar o provedor de código hash padrão, que é a implementação de cada chave.GetHashCode()

comparer
IComparer

O IComparer objeto a ser usado para determinar se duas chaves são iguais.

-ou-

nullpara usar o comparador padrão, que é a implementação de cada chave.Equals(Object)

Atributos

Exceções

capacity é menor que zero.

-ou-

loadFactor é menor que 0,1.

-ou-

loadFactor é maior que 1,0.

Comentários

Especificar a capacidade inicial elimina a necessidade de executar várias operações de redimensionamento ao adicionar elementos ao Hashtable objeto. A capacidade é automaticamente aumentada conforme necessário com base no fator de carga.

O fator de carga é a taxa máxima de elementos para buckets. Um fator de carga menor significa uma pesquisa mais rápida ao custo do aumento do consumo de memória. Um fator de carga de 1.0 é o melhor equilíbrio entre velocidade e tamanho.

Quando o fator de carga real atinge o fator de carga especificado, o número de buckets é automaticamente aumentado para o menor número primo que é maior que o dobro do número atual de buckets.

O provedor de código hash distribui códigos de hash para chaves no Hashtable. O provedor de código hash padrão é a implementação da chave de Object.GetHashCode.

O comparador determina se duas chaves são iguais. Cada chave em uma Hashtable deve ser exclusiva. O comparador padrão é a implementação da chave de Object.Equals.

O provedor de código hash personalizado e o comparador personalizado habilitam cenários como fazer pesquisas com cadeias de caracteres que não diferenciam maiúsculas de minúsculas.

Esse construtor é uma O(n) operação, onde n está o capacity parâmetro.

Confira também

Aplica-se a

Hashtable(IDictionary, Single, IHashCodeProvider, IComparer)

Cuidado

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

Inicializa uma nova instância da Hashtable classe copiando os elementos do dicionário especificado para o novo Hashtable objeto. O novo Hashtable objeto tem uma capacidade inicial igual ao número de elementos copiados e usa o fator de carga, o provedor de código de hash e o comparador especificados.

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

Parâmetros

d
IDictionary

O IDictionary objeto a ser copiado para um novo Hashtable objeto.

loadFactor
Single

Um número no intervalo de 0,1 a 1,0 multiplicado pelo valor padrão que fornece o melhor desempenho. O resultado é a taxa máxima de elementos para buckets.

hcp
IHashCodeProvider

O IHashCodeProvider objeto que fornece os códigos de hash para todas as chaves no Hashtable.

-ou-

nullpara usar o provedor de código hash padrão, que é a implementação de cada chave.GetHashCode()

comparer
IComparer

O IComparer objeto a ser usado para determinar se duas chaves são iguais.

-ou-

nullpara usar o comparador padrão, que é a implementação de cada chave.Equals(Object)

Atributos

Exceções

loadFactor é menor que 0,1.

-ou-

loadFactor é maior que 1,0.

Comentários

A capacidade inicial é definida como o número de elementos no dicionário de origem. A capacidade é automaticamente aumentada conforme necessário com base no fator de carga.

O fator de carga é a taxa máxima de elementos para buckets. Um fator de carga menor significa uma pesquisa mais rápida ao custo do aumento do consumo de memória. Um fator de carga de 1.0 é o melhor equilíbrio entre velocidade e tamanho.

Quando o fator de carga real atinge o fator de carga especificado, o número de buckets é automaticamente aumentado para o menor número primo que é maior que o dobro do número atual de buckets.

O provedor de código hash distribui códigos de hash para chaves no Hashtable objeto. O provedor de código hash padrão é a implementação da chave de Object.GetHashCode.

O comparador determina se duas chaves são iguais. Cada chave em uma Hashtable deve ser exclusiva. O comparador padrão é a implementação da chave de Object.Equals.

O provedor de código hash personalizado e o comparador personalizado habilitam cenários como fazer pesquisas com cadeias de caracteres que não diferenciam maiúsculas de minúsculas.

Os elementos do novo Hashtable são classificados na mesma ordem em que o enumerador itera por meio do IDictionary objeto.

Esse construtor é uma O(n) operação, onde n está o número de elementos no d parâmetro.

Aplica-se a

Hashtable(Int32, Single, IEqualityComparer)

Inicializa uma nova instância vazia da Hashtable classe usando a capacidade inicial, o fator de carga e IEqualityComparer o objeto especificados.

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)

Parâmetros

capacity
Int32

O número aproximado de elementos que o Hashtable objeto pode conter inicialmente.

loadFactor
Single

Um número no intervalo de 0,1 a 1,0 multiplicado pelo valor padrão que fornece o melhor desempenho. O resultado é a taxa máxima de elementos para buckets.

equalityComparer
IEqualityComparer

O IEqualityComparer objeto que define o provedor de código hash e o comparador a ser usado com o Hashtable.

-ou-

null para usar o provedor de código hash padrão e o comparador padrão. O provedor de código hash padrão é a implementação de GetHashCode() cada chave e o comparador padrão é a implementação de cada chave.Equals(Object)

Exceções

capacity é menor que zero.

-ou-

loadFactor é menor que 0,1.

-ou-

loadFactor é maior que 1,0.

Exemplos

O exemplo de código a seguir cria tabelas de hash usando construtores diferentes Hashtable e demonstra as diferenças no comportamento das tabelas de hash, mesmo que cada uma contenha os mesmos elementos.

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

Comentários

Especificar a capacidade inicial elimina a necessidade de executar várias operações de redimensionamento ao adicionar elementos ao Hashtable objeto. A capacidade é automaticamente aumentada conforme necessário com base no fator de carga.

O fator de carga é a taxa máxima de elementos para buckets. Um fator de carga menor significa uma pesquisa mais rápida ao custo do aumento do consumo de memória. Um fator de carga de 1.0 é o melhor equilíbrio entre velocidade e tamanho.

Quando o fator de carga real atinge o fator de carga especificado, o número de buckets é automaticamente aumentado para o menor número primo que é maior que o dobro do número atual de buckets.

O IEqualityComparer objeto inclui o provedor de código hash e o comparador. Se um IEqualityComparer for usado no Hashtable construtor, os objetos usados como chaves no Hashtable não serão necessários para substituir os métodos e Object.Equals os Object.GetHashCode métodos.

O provedor de código hash distribui códigos de hash para chaves no Hashtable. O provedor de código hash padrão é a implementação da chave de Object.GetHashCode.

O comparador determina se duas chaves são iguais. Cada chave em uma Hashtable deve ser exclusiva. O comparador padrão é a implementação da chave de Object.Equals.

O IEqualityComparer habilita cenários como fazer pesquisas com cadeias de caracteres que não diferenciam maiúsculas de minúsculas.

Esse construtor é uma O(n) operação, onde n está o capacity parâmetro.

Confira também

Aplica-se a

Hashtable(Int32, IHashCodeProvider, IComparer)

Cuidado

Please use Hashtable(int, IEqualityComparer) instead.

Inicializa uma nova instância vazia da Hashtable classe usando a capacidade inicial especificada, o provedor de código de hash, o comparador e o fator de carga padrão.

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

Parâmetros

capacity
Int32

O número aproximado de elementos que o Hashtable objeto pode conter inicialmente.

hcp
IHashCodeProvider

O IHashCodeProvider objeto que fornece os códigos de hash para todas as chaves no Hashtable.

-ou-

nullpara usar o provedor de código hash padrão, que é a implementação de cada chave.GetHashCode()

comparer
IComparer

O IComparer objeto a ser usado para determinar se duas chaves são iguais.

-ou-

nullpara usar o comparador padrão, que é a implementação de cada chave.Equals(Object)

Atributos

Exceções

capacity é menor que zero.

Comentários

Especificar a capacidade inicial elimina a necessidade de executar várias operações de redimensionamento ao adicionar elementos ao Hashtable objeto. A capacidade é automaticamente aumentada conforme necessário com base no fator de carga.

O fator de carga é a taxa máxima de elementos para buckets. Um fator de carga menor significa uma pesquisa mais rápida ao custo do aumento do consumo de memória.

Quando o fator de carga real atinge o fator de carga especificado, o número de buckets é automaticamente aumentado para o menor número primo que é maior que o dobro do número atual de buckets.

O provedor de código hash distribui códigos de hash para chaves no Hashtable. O provedor de código hash padrão é a implementação da chave de Object.GetHashCode.

O comparador determina se duas chaves são iguais. Cada chave em uma Hashtable deve ser exclusiva. O comparador padrão é a implementação da chave de Object.Equals.

O provedor de código hash personalizado e o comparador personalizado habilitam cenários como fazer pesquisas com cadeias de caracteres que não diferenciam maiúsculas de minúsculas.

Esse construtor é uma O(n) operação, onde n está o capacity parâmetro.

Confira também

Aplica-se a

Hashtable(IDictionary, Single, IEqualityComparer)

Inicializa uma nova instância da Hashtable classe copiando os elementos do dicionário especificado para o novo Hashtable objeto. O novo Hashtable objeto tem uma capacidade inicial igual ao número de elementos copiados e usa o fator de carga e IEqualityComparer o objeto especificados.

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)

Parâmetros

d
IDictionary

O IDictionary objeto a ser copiado para um novo Hashtable objeto.

loadFactor
Single

Um número no intervalo de 0,1 a 1,0 multiplicado pelo valor padrão que fornece o melhor desempenho. O resultado é a taxa máxima de elementos para buckets.

equalityComparer
IEqualityComparer

O IEqualityComparer objeto que define o provedor de código hash e o comparador a ser usado com o Hashtable.

-ou-

null para usar o provedor de código hash padrão e o comparador padrão. O provedor de código hash padrão é a implementação de GetHashCode() cada chave e o comparador padrão é a implementação de cada chave.Equals(Object)

Exceções

loadFactor é menor que 0,1.

-ou-

loadFactor é maior que 1,0.

Exemplos

O exemplo de código a seguir cria tabelas de hash usando construtores diferentes Hashtable e demonstra as diferenças no comportamento das tabelas de hash, mesmo que cada uma contenha os mesmos elementos.

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

Comentários

A capacidade inicial é definida como o número de elementos no dicionário de origem. A capacidade é automaticamente aumentada conforme necessário com base no fator de carga.

O fator de carga é a taxa máxima de elementos para buckets. Um fator de carga menor significa uma pesquisa mais rápida ao custo do aumento do consumo de memória. Um fator de carga de 1.0 é o melhor equilíbrio entre velocidade e tamanho.

Quando o fator de carga real atinge o fator de carga especificado, o número de buckets é automaticamente aumentado para o menor número primo que é maior que o dobro do número atual de buckets.

O IEqualityComparer objeto inclui o provedor de código hash e o comparador. Se um IEqualityComparer for usado no Hashtable construtor, os objetos usados como chaves no Hashtable objeto não serão necessários para substituir os métodos e Object.Equals os Object.GetHashCode métodos.

O provedor de código hash distribui códigos de hash para chaves no Hashtable. O provedor de código hash padrão é a implementação da chave de Object.GetHashCode.

O comparador determina se duas chaves são iguais. Cada chave em uma Hashtable deve ser exclusiva. O comparador padrão é a implementação da chave de Object.Equals.

O IEqualityComparer habilita cenários como fazer pesquisas com cadeias de caracteres que não diferenciam maiúsculas de minúsculas.

Os elementos do novo Hashtable são classificados na mesma ordem em que o enumerador itera por meio do IDictionary objeto.

Esse construtor é uma O(n) operação, onde n está o número de elementos no d parâmetro.

Confira também

Aplica-se a

Hashtable(IDictionary, IHashCodeProvider, IComparer)

Cuidado

Please use Hashtable(IDictionary, IEqualityComparer) instead.

Inicializa uma nova instância da Hashtable classe copiando os elementos do dicionário especificado para o novo Hashtable objeto. O novo Hashtable objeto tem uma capacidade inicial igual ao número de elementos copiados e usa o fator de carga padrão e o provedor e o comparador de código hash especificados. Essa API está obsoleta. Para obter uma alternativa, consulte Hashtable(IDictionary, IEqualityComparer).

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

Parâmetros

d
IDictionary

O IDictionary objeto a ser copiado para um novo Hashtable objeto.

hcp
IHashCodeProvider

O IHashCodeProvider objeto que fornece os códigos de hash para todas as chaves no Hashtable.

-ou-

nullpara usar o provedor de código hash padrão, que é a implementação de cada chave.GetHashCode()

comparer
IComparer

O IComparer objeto a ser usado para determinar se duas chaves são iguais.

-ou-

nullpara usar o comparador padrão, que é a implementação de cada chave.Equals(Object)

Atributos

Exceções

Comentários

A capacidade inicial é definida como o número de elementos no dicionário de origem. A capacidade é automaticamente aumentada conforme necessário com base no fator de carga.

O fator de carga é a taxa máxima de elementos para buckets. Um fator de carga menor significa uma pesquisa mais rápida ao custo do aumento do consumo de memória.

Quando o fator de carga real atinge o fator de carga especificado, o número de buckets é automaticamente aumentado para o menor número primo que é maior que o dobro do número atual de buckets.

O provedor de código hash distribui códigos de hash para chaves no Hashtable objeto. O provedor de código hash padrão é a implementação da chave de Object.GetHashCode.

O comparador determina se duas chaves são iguais. Cada chave em uma Hashtable deve ser exclusiva. O comparador padrão é a implementação da chave de Object.Equals.

O provedor de código hash personalizado e o comparador personalizado habilitam cenários como fazer pesquisas com cadeias de caracteres que não diferenciam maiúsculas de minúsculas.

Os elementos do novo Hashtable são classificados na mesma ordem em que o enumerador itera por meio do IDictionary objeto.

Esse construtor é uma O(n) operação, onde n está o número de elementos no d parâmetro.

Confira também

Aplica-se a

Hashtable(Int32, Single)

Inicializa uma nova instância vazia da Hashtable classe usando a capacidade inicial especificada e o fator de carga e o provedor de código hash padrão e o comparador.

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)

Parâmetros

capacity
Int32

O número aproximado de elementos que o Hashtable objeto pode conter inicialmente.

loadFactor
Single

Um número no intervalo de 0,1 a 1,0 multiplicado pelo valor padrão que fornece o melhor desempenho. O resultado é a taxa máxima de elementos para buckets.

Exceções

capacity é menor que zero.

-ou-

loadFactor é menor que 0,1.

-ou-

loadFactor é maior que 1,0.

capacity está causando um estouro.

Exemplos

O exemplo de código a seguir cria tabelas de hash usando construtores diferentes Hashtable e demonstra as diferenças no comportamento das tabelas de hash, mesmo que cada uma contenha os mesmos elementos.

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

Comentários

Especificar a capacidade inicial elimina a necessidade de executar várias operações de redimensionamento ao adicionar elementos ao Hashtable objeto. A capacidade é automaticamente aumentada conforme necessário com base no fator de carga.

O fator de carga é a taxa máxima de elementos para buckets. Um fator de carga menor significa uma pesquisa mais rápida ao custo do aumento do consumo de memória. Um fator de carga de 1.0 é o melhor equilíbrio entre velocidade e tamanho.

Quando o fator de carga real atinge o fator de carga especificado, o número de buckets é automaticamente aumentado para o menor número primo que é maior que o dobro do número atual de buckets.

O provedor de código hash distribui códigos de hash para chaves no Hashtable. O provedor de código hash padrão é a implementação da chave de Object.GetHashCode.

O comparador determina se duas chaves são iguais. Cada chave em uma Hashtable deve ser exclusiva. O comparador padrão é a implementação da chave de Object.Equals.

Esse construtor é uma O(n) operação, onde n está o capacity parâmetro.

Confira também

Aplica-se a

Hashtable(SerializationInfo, StreamingContext)

Inicializa uma nova instância vazia da Hashtable classe que é serializável usando os objetos especificadosSerializationInfo.StreamingContext

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

Parâmetros

info
SerializationInfo

Um SerializationInfo objeto que contém as informações necessárias para serializar o Hashtable objeto.

context
StreamingContext

Um StreamingContext objeto que contém a origem e o destino do fluxo serializado associado ao Hashtable.

Exceções

info é null.

Comentários

A capacidade de uma tabela de hash é usada para calcular o número ideal de buckets de tabela de hash com base no fator de carga. A capacidade é automaticamente aumentada conforme necessário.

O fator de carga é a taxa máxima de elementos para buckets. Um fator de carga menor significa uma pesquisa mais rápida ao custo do aumento do consumo de memória.

Quando o fator de carga real atinge o fator de carga especificado, o número de buckets é automaticamente aumentado para o menor número primo que é maior que o dobro do número atual de buckets.

O provedor de código hash distribui códigos de hash para chaves no Hashtable objeto. O provedor de código hash padrão é a implementação da chave de Object.GetHashCode.

O comparador determina se duas chaves são iguais. Cada chave em uma Hashtable deve ser exclusiva. O comparador padrão é a implementação da chave de Object.Equals.

Esse construtor é uma O(n) operação, onde n está Count.

Como serializar e desserializar um enumerador para um Hashtable pode fazer com que os elementos sejam reordenados, não é possível continuar a enumeração sem chamar o Reset método.

Confira também

Aplica-se a

Hashtable(IHashCodeProvider, IComparer)

Cuidado

Please use Hashtable(IEqualityComparer) instead.

Inicializa uma nova instância vazia da Hashtable classe usando a capacidade inicial padrão e o fator de carga e o provedor de código hash e o comparador especificados.

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

Parâmetros

hcp
IHashCodeProvider

O IHashCodeProvider objeto que fornece os códigos de hash para todas as chaves no Hashtable objeto.

-ou-

nullpara usar o provedor de código hash padrão, que é a implementação de cada chave.GetHashCode()

comparer
IComparer

O IComparer objeto a ser usado para determinar se duas chaves são iguais.

-ou-

nullpara usar o comparador padrão, que é a implementação de cada chave.Equals(Object)

Atributos

Comentários

A capacidade de uma tabela de hash é usada para calcular o número ideal de buckets de tabela de hash com base no fator de carga. A capacidade é automaticamente aumentada conforme necessário.

O fator de carga é a taxa máxima de elementos para buckets. Um fator de carga menor significa uma pesquisa mais rápida ao custo do aumento do consumo de memória.

Quando o fator de carga real atinge o fator de carga especificado, o número de buckets é automaticamente aumentado para o menor número primo que é maior que o dobro do número atual de buckets.

O provedor de código hash distribui códigos de hash para chaves no Hashtable objeto. O provedor de código hash padrão é a implementação da chave de Object.GetHashCode.

O comparador determina se duas chaves são iguais. Cada chave em uma Hashtable deve ser exclusiva. O comparador padrão é a implementação da chave de Object.Equals.

O provedor de código hash personalizado e o comparador personalizado habilitam cenários como fazer pesquisas com cadeias de caracteres que não diferenciam maiúsculas de minúsculas.

Este construtor é uma O(1) operação.

Confira também

Aplica-se a

Hashtable(IDictionary, Single)

Inicializa uma nova instância da Hashtable classe copiando os elementos do dicionário especificado para o novo Hashtable objeto. O novo Hashtable objeto tem uma capacidade inicial igual ao número de elementos copiados e usa o fator de carga especificado e o provedor e o comparador de código hash padrão.

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)

Parâmetros

d
IDictionary

O IDictionary objeto a ser copiado para um novo Hashtable objeto.

loadFactor
Single

Um número no intervalo de 0,1 a 1,0 multiplicado pelo valor padrão que fornece o melhor desempenho. O resultado é a taxa máxima de elementos para buckets.

Exceções

loadFactor é menor que 0,1.

-ou-

loadFactor é maior que 1,0.

Exemplos

O exemplo de código a seguir cria tabelas de hash usando construtores diferentes Hashtable e demonstra as diferenças no comportamento das tabelas de hash, mesmo que cada uma contenha os mesmos elementos.

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

Comentários

A capacidade inicial é definida como o número de elementos no dicionário de origem. A capacidade é automaticamente aumentada conforme necessário com base no fator de carga.

O fator de carga é a taxa máxima de elementos para buckets. Um fator de carga menor significa uma pesquisa mais rápida ao custo do aumento do consumo de memória. Um fator de carga de 1.0 é o melhor equilíbrio entre velocidade e tamanho.

Quando o fator de carga real atinge o fator de carga especificado, o número de buckets é automaticamente aumentado para o menor número primo que é maior que o dobro do número atual de buckets.

O provedor de código hash distribui códigos de hash para chaves no Hashtable objeto. O provedor de código hash padrão é a implementação da chave de Object.GetHashCode.

O comparador determina se duas chaves são iguais. Cada chave em uma Hashtable deve ser exclusiva. O comparador padrão é a implementação da chave de Object.Equals.

Os elementos do novo Hashtable são classificados na mesma ordem em que o enumerador itera por meio do IDictionary objeto.

Esse construtor é uma O(n) operação, onde n está o número de elementos no d parâmetro.

Confira também

Aplica-se a

Hashtable(IDictionary, IEqualityComparer)

Inicializa uma nova instância da Hashtable classe copiando os elementos do dicionário especificado para um novo Hashtable objeto. O novo Hashtable objeto tem uma capacidade inicial igual ao número de elementos copiados e usa o fator de carga padrão e o objeto especificado IEqualityComparer .

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)

Parâmetros

d
IDictionary

O IDictionary objeto a ser copiado para um novo Hashtable objeto.

equalityComparer
IEqualityComparer

O IEqualityComparer objeto que define o provedor de código hash e o comparador a ser usado com o Hashtable.

-ou-

null para usar o provedor de código hash padrão e o comparador padrão. O provedor de código hash padrão é a implementação de GetHashCode() cada chave e o comparador padrão é a implementação de cada chave.Equals(Object)

Exceções

Exemplos

O exemplo de código a seguir cria tabelas de hash usando construtores diferentes Hashtable e demonstra as diferenças no comportamento das tabelas de hash, mesmo que cada uma contenha os mesmos elementos.

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

Comentários

A capacidade inicial é definida como o número de elementos no dicionário de origem. A capacidade é automaticamente aumentada conforme necessário com base no fator de carga.

O fator de carga é a taxa máxima de elementos para buckets. Um fator de carga menor significa uma pesquisa mais rápida ao custo do aumento do consumo de memória.

Quando o fator de carga real atinge o fator de carga especificado, o número de buckets é automaticamente aumentado para o menor número primo que é maior que o dobro do número atual de buckets.

O IEqualityComparer objeto inclui o provedor de código hash e o comparador. Se um IEqualityComparer for usado no Hashtable construtor, os objetos usados como chaves no Hashtable objeto não serão necessários para substituir os métodos e Object.Equals os Object.GetHashCode métodos.

O provedor de código hash distribui códigos de hash para chaves no Hashtable. O provedor de código hash padrão é a implementação da chave de Object.GetHashCode.

O comparador determina se duas chaves são iguais. Cada chave em uma Hashtable deve ser exclusiva. O comparador padrão é a implementação da chave de Object.Equals.

O IEqualityComparer habilita cenários como fazer pesquisas com cadeias de caracteres que não diferenciam maiúsculas de minúsculas.

Os elementos do novo Hashtable são classificados na mesma ordem em que o enumerador itera por meio do IDictionary objeto.

Esse construtor é uma O(n) operação, onde n está o número de elementos no d parâmetro.

Confira também

Aplica-se a

Hashtable(Int32)

Inicializa uma nova instância vazia da classe usando a Hashtable capacidade inicial especificada e o fator de carga padrão, o provedor de código hash e o comparador.

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

Parâmetros

capacity
Int32

O número aproximado de elementos que o Hashtable objeto pode conter inicialmente.

Exceções

capacity é menor que zero.

Exemplos

O exemplo de código a seguir cria tabelas de hash usando construtores diferentes Hashtable e demonstra as diferenças no comportamento das tabelas de hash, mesmo que cada uma contenha os mesmos elementos.

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

Comentários

Especificar a capacidade inicial elimina a necessidade de executar várias operações de redimensionamento ao adicionar elementos ao Hashtable objeto. A capacidade é automaticamente aumentada conforme necessário com base no fator de carga.

O fator de carga é a taxa máxima de elementos para buckets. Um fator de carga menor significa uma pesquisa mais rápida ao custo do aumento do consumo de memória.

Quando o fator de carga real atinge o fator de carga especificado, o número de buckets é automaticamente aumentado para o menor número primo que é maior que o dobro do número atual de buckets.

O provedor de código hash distribui códigos de hash para chaves no Hashtable. O provedor de código hash padrão é a implementação da chave de Object.GetHashCode.

O comparador determina se duas chaves são iguais. Cada chave em uma Hashtable deve ser exclusiva. O comparador padrão é a implementação da chave de Object.Equals.

Esse construtor é uma O(n) operação, onde n está capacity.

Confira também

Aplica-se a

Hashtable(IEqualityComparer)

Inicializa uma nova instância vazia da Hashtable classe usando a capacidade inicial padrão e o fator de carga e o objeto especificado IEqualityComparer .

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)

Parâmetros

equalityComparer
IEqualityComparer

O IEqualityComparer objeto que define o provedor de código hash e o comparador a ser usado com o Hashtable objeto.

-ou-

null para usar o provedor de código hash padrão e o comparador padrão. O provedor de código hash padrão é a implementação de GetHashCode() cada chave e o comparador padrão é a implementação de cada chave.Equals(Object)

Exemplos

O exemplo de código a seguir cria tabelas de hash usando construtores diferentes Hashtable e demonstra as diferenças no comportamento das tabelas de hash, mesmo que cada uma contenha os mesmos elementos.

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

Comentários

A capacidade de uma tabela de hash é usada para calcular o número ideal de buckets de tabela de hash com base no fator de carga. A capacidade é automaticamente aumentada conforme necessário.

O fator de carga é a taxa máxima de elementos para buckets. Um fator de carga menor significa uma pesquisa mais rápida ao custo do aumento do consumo de memória.

Quando o fator de carga real atinge o fator de carga especificado, o número de buckets é automaticamente aumentado para o menor número primo que é maior que o dobro do número atual de buckets.

O IEqualityComparer objeto inclui o provedor de código hash e o comparador. Se um IEqualityComparer for usado no Hashtable construtor, os objetos usados como chaves no Hashtable objeto não serão necessários para substituir os métodos e Object.Equals os Object.GetHashCode métodos.

O provedor de código hash distribui códigos de hash para chaves no Hashtable. O provedor de código hash padrão é a implementação da chave de Object.GetHashCode.

O comparador determina se duas chaves são iguais. Cada chave em uma Hashtable deve ser exclusiva. O comparador padrão é a implementação da chave de Object.Equals.

O IEqualityComparer habilita cenários como fazer pesquisas com cadeias de caracteres que não diferenciam maiúsculas de minúsculas.

Este construtor é uma O(1) operação.

Confira também

Aplica-se a

Hashtable(IDictionary)

Inicializa uma nova instância da Hashtable classe copiando os elementos do dicionário especificado para o novo Hashtable objeto. O novo Hashtable objeto tem uma capacidade inicial igual ao número de elementos copiados e usa o fator de carga padrão, o provedor de código hash e o comparador.

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)

Parâmetros

d
IDictionary

O IDictionary objeto a ser copiado para um novo Hashtable objeto.

Exceções

Exemplos

O exemplo de código a seguir cria tabelas de hash usando construtores diferentes Hashtable e demonstra as diferenças no comportamento das tabelas de hash, mesmo que cada uma contenha os mesmos elementos.

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

Comentários

A capacidade inicial é definida como o número de elementos no dicionário de origem. A capacidade é automaticamente aumentada conforme necessário com base no fator de carga.

O fator de carga é a taxa máxima de elementos para buckets. Um fator de carga menor significa uma pesquisa mais rápida ao custo do aumento do consumo de memória.

Quando o fator de carga real atinge o fator de carga especificado, o número de buckets é automaticamente aumentado para o menor número primo que é maior que o dobro do número atual de buckets.

O provedor de código hash distribui códigos de hash para chaves no Hashtable objeto. O provedor de código hash padrão é a implementação da chave de Object.GetHashCode.

O comparador determina se duas chaves são iguais. Cada chave em uma Hashtable deve ser exclusiva. O comparador padrão é a implementação da chave de Object.Equals.

Os elementos do novo Hashtable são classificados na mesma ordem em que o enumerador itera por meio do IDictionary objeto.

Esse construtor é uma O(n) operação, onde n está o número de elementos no d parâmetro.

Confira também

Aplica-se a

Hashtable(Int32, IEqualityComparer)

Inicializa uma nova instância vazia da classe usando a Hashtable capacidade inicial especificada e IEqualityComparero fator de carga padrão.

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)

Parâmetros

capacity
Int32

O número aproximado de elementos que o Hashtable objeto pode conter inicialmente.

equalityComparer
IEqualityComparer

O IEqualityComparer objeto que define o provedor de código hash e o comparador a ser usado com o Hashtable.

-ou-

null para usar o provedor de código hash padrão e o comparador padrão. O provedor de código hash padrão é a implementação de GetHashCode() cada chave e o comparador padrão é a implementação de cada chave.Equals(Object)

Exceções

capacity é menor que zero.

Exemplos

O exemplo de código a seguir cria tabelas de hash usando construtores diferentes Hashtable e demonstra as diferenças no comportamento das tabelas de hash, mesmo que cada uma contenha os mesmos elementos.

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

Comentários

Especificar a capacidade inicial elimina a necessidade de executar várias operações de redimensionamento ao adicionar elementos ao Hashtable objeto. A capacidade é automaticamente aumentada conforme necessário com base no fator de carga.

O fator de carga é a taxa máxima de elementos para buckets. Um fator de carga menor significa uma pesquisa mais rápida ao custo do aumento do consumo de memória.

Quando o fator de carga real atinge o fator de carga especificado, o número de buckets é automaticamente aumentado para o menor número primo que é maior que o dobro do número atual de buckets.

O IEqualityComparer objeto inclui o provedor de código hash e o comparador. Se um IEqualityComparer for usado no Hashtable construtor, os objetos usados como chaves no Hashtable não serão necessários para substituir os métodos e Object.Equals os Object.GetHashCode métodos.

O provedor de código hash distribui códigos de hash para chaves no Hashtable. O provedor de código hash padrão é a implementação da chave de Object.GetHashCode.

O comparador determina se duas chaves são iguais. Cada chave em uma Hashtable deve ser exclusiva. O comparador padrão é a implementação da chave de Object.Equals.

O IEqualityComparer habilita cenários como fazer pesquisas com cadeias de caracteres que não diferenciam maiúsculas de minúsculas.

Esse construtor é uma O(n) operação, onde n está o capacity parâmetro.

Confira também

Aplica-se a