Hashtable Constructores

Definición

Inicializa una nueva instancia de la clase Hashtable.

Sobrecargas

Nombre Description
Hashtable()

Inicializa una nueva instancia vacía de la Hashtable clase mediante la capacidad inicial predeterminada, el factor de carga, el proveedor de código hash y el comparador.

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

Inicializa una nueva instancia vacía de la Hashtable clase mediante la capacidad inicial, el factor de carga, el proveedor de código hash y el comparador especificados.

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

Inicializa una nueva instancia de la Hashtable clase copiando los elementos del diccionario especificado en el nuevo Hashtable objeto. El nuevo Hashtable objeto tiene una capacidad inicial igual al número de elementos copiados y usa el factor de carga, el proveedor de código hash y el comparador especificados.

Hashtable(Int32, Single, IEqualityComparer)

Inicializa una nueva instancia vacía de la Hashtable clase utilizando la capacidad inicial, el factor de carga y IEqualityComparer el objeto especificados.

Hashtable(Int32, IHashCodeProvider, IComparer)
Obsoletos.

Inicializa una nueva instancia vacía de la Hashtable clase utilizando la capacidad inicial especificada, el proveedor de código hash, el comparador y el factor de carga predeterminado.

Hashtable(IDictionary, Single, IEqualityComparer)

Inicializa una nueva instancia de la Hashtable clase copiando los elementos del diccionario especificado en el nuevo Hashtable objeto. El nuevo Hashtable objeto tiene una capacidad inicial igual al número de elementos copiados y usa el factor de carga y IEqualityComparer el objeto especificados.

Hashtable(IDictionary, IHashCodeProvider, IComparer)
Obsoletos.

Inicializa una nueva instancia de la Hashtable clase copiando los elementos del diccionario especificado en el nuevo Hashtable objeto. El nuevo Hashtable objeto tiene una capacidad inicial igual al número de elementos copiados y usa el factor de carga predeterminado y el proveedor de código hash y comparador especificados. Esta API está obsoleta. Para obtener una alternativa, consulte Hashtable(IDictionary, IEqualityComparer).

Hashtable(Int32, Single)

Inicializa una nueva instancia vacía de la Hashtable clase utilizando la capacidad inicial y el factor de carga especificados, así como el proveedor y comparador de código hash predeterminados.

Hashtable(SerializationInfo, StreamingContext)

Inicializa una nueva instancia vacía de la Hashtable clase que se puede serializar mediante los objetos y SerializationInfo especificadosStreamingContext.

Hashtable(IHashCodeProvider, IComparer)
Obsoletos.

Inicializa una nueva instancia vacía de la Hashtable clase mediante la capacidad inicial predeterminada y el factor de carga, y el proveedor de código hash y comparador especificados.

Hashtable(IDictionary, Single)

Inicializa una nueva instancia de la Hashtable clase copiando los elementos del diccionario especificado en el nuevo Hashtable objeto. El nuevo Hashtable objeto tiene una capacidad inicial igual al número de elementos copiados y usa el factor de carga especificado y el proveedor de código hash predeterminado y comparador.

Hashtable(IDictionary, IEqualityComparer)

Inicializa una nueva instancia de la Hashtable clase copiando los elementos del diccionario especificado en un nuevo Hashtable objeto. El nuevo Hashtable objeto tiene una capacidad inicial igual al número de elementos copiados y usa el factor de carga predeterminado y el objeto especificado IEqualityComparer .

Hashtable(Int32)

Inicializa una nueva instancia vacía de la Hashtable clase mediante la capacidad inicial especificada y el factor de carga predeterminado, el proveedor de código hash y el comparador.

Hashtable(IEqualityComparer)

Inicializa una nueva instancia vacía de la Hashtable clase utilizando la capacidad inicial predeterminada y el factor de carga, y el objeto especificado IEqualityComparer .

Hashtable(IDictionary)

Inicializa una nueva instancia de la Hashtable clase copiando los elementos del diccionario especificado en el nuevo Hashtable objeto. El nuevo Hashtable objeto tiene una capacidad inicial igual al número de elementos copiados y usa el factor de carga predeterminado, el proveedor de código hash y el comparador.

Hashtable(Int32, IEqualityComparer)

Inicializa una nueva instancia vacía de la Hashtable clase utilizando la capacidad inicial especificada y IEqualityComparer, y el factor de carga predeterminado.

Hashtable()

Inicializa una nueva instancia vacía de la Hashtable clase mediante la capacidad inicial predeterminada, el factor de carga, el proveedor de código hash y el comparador.

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

Ejemplos

En el ejemplo de código siguiente se crean tablas hash con constructores diferentes Hashtable y se muestran las diferencias en el comportamiento de las tablas hash, incluso si cada una contiene los mismos 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

Comentarios

La capacidad de una tabla hash se usa para calcular el número óptimo de cubos de tabla hash en función del factor de carga. La capacidad aumenta automáticamente según sea necesario.

El factor de carga es la relación máxima de elementos con los cubos. Un factor de carga más pequeño significa una búsqueda más rápida en el costo del aumento del consumo de memoria.

Cuando el factor de carga real alcanza el factor de carga especificado, el número de cubos aumenta automáticamente al número primo más pequeño que es mayor que dos veces el número actual de cubos.

El proveedor de código hash dispensa códigos hash para las claves del Hashtable objeto . El proveedor de código hash predeterminado es la implementación de la clave de Object.GetHashCode.

El comparador determina si dos claves son iguales. Cada clave de un Hashtable elemento debe ser única. El comparador predeterminado es la implementación de la clave de Object.Equals.

Este constructor es una O(1) operación.

Consulte también

Se aplica a

Hashtable(Int32, Single, IHashCodeProvider, IComparer)

Precaución

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

Inicializa una nueva instancia vacía de la Hashtable clase mediante la capacidad inicial, el factor de carga, el proveedor de código hash y el 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

Número aproximado de elementos que el Hashtable objeto puede contener inicialmente.

loadFactor
Single

Número del intervalo comprendido entre 0,1 y 1,0 multiplicado por el valor predeterminado que proporciona el mejor rendimiento. El resultado es la relación máxima de elementos a cubos.

hcp
IHashCodeProvider

Objeto IHashCodeProvider que proporciona los códigos hash para todas las claves de Hashtable.

O bien

null para usar el proveedor de código hash predeterminado, que es la implementación de cada clave de GetHashCode().

comparer
IComparer

Objeto IComparer que se va a usar para determinar si dos claves son iguales.

O bien

null para usar el comparador predeterminado, que es la implementación de cada clave de Equals(Object).

Atributos

Excepciones

capacity es menor que cero.

O bien

loadFactor es menor que 0,1.

O bien

loadFactor es mayor que 1,0.

Comentarios

La especificación de la capacidad inicial elimina la necesidad de realizar una serie de operaciones de cambio de tamaño al agregar elementos al Hashtable objeto . La capacidad aumenta automáticamente según sea necesario en función del factor de carga.

El factor de carga es la relación máxima de elementos con los cubos. Un factor de carga más pequeño significa una búsqueda más rápida en el costo del aumento del consumo de memoria. Un factor de carga de 1,0 es el mejor equilibrio entre velocidad y tamaño.

Cuando el factor de carga real alcanza el factor de carga especificado, el número de cubos aumenta automáticamente al número primo más pequeño que es mayor que dos veces el número actual de cubos.

El proveedor de código hash dispensa códigos hash para las claves de Hashtable. El proveedor de código hash predeterminado es la implementación de la clave de Object.GetHashCode.

El comparador determina si dos claves son iguales. Cada clave de un Hashtable elemento debe ser única. El comparador predeterminado es la implementación de la clave de Object.Equals.

El proveedor de código hash personalizado y el comparador personalizado habilitan escenarios como realizar búsquedas con cadenas que no distinguen mayúsculas de minúsculas.

Este constructor es una O(n) operación, donde n es el capacity parámetro .

Consulte también

Se aplica a

Hashtable(IDictionary, Single, IHashCodeProvider, IComparer)

Precaución

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

Inicializa una nueva instancia de la Hashtable clase copiando los elementos del diccionario especificado en el nuevo Hashtable objeto. El nuevo Hashtable objeto tiene una capacidad inicial igual al número de elementos copiados y usa el factor de carga, el proveedor de código hash y el 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

Objeto IDictionary que se va a copiar en un nuevo Hashtable objeto.

loadFactor
Single

Número del intervalo comprendido entre 0,1 y 1,0 multiplicado por el valor predeterminado que proporciona el mejor rendimiento. El resultado es la relación máxima de elementos a cubos.

hcp
IHashCodeProvider

Objeto IHashCodeProvider que proporciona los códigos hash para todas las claves de Hashtable.

O bien

null para usar el proveedor de código hash predeterminado, que es la implementación de cada clave de GetHashCode().

comparer
IComparer

Objeto IComparer que se va a usar para determinar si dos claves son iguales.

O bien

null para usar el comparador predeterminado, que es la implementación de cada clave de Equals(Object).

Atributos

Excepciones

loadFactor es menor que 0,1.

O bien

loadFactor es mayor que 1,0.

Comentarios

La capacidad inicial se establece en el número de elementos del diccionario de origen. La capacidad aumenta automáticamente según sea necesario en función del factor de carga.

El factor de carga es la relación máxima de elementos con los cubos. Un factor de carga más pequeño significa una búsqueda más rápida en el costo del aumento del consumo de memoria. Un factor de carga de 1,0 es el mejor equilibrio entre velocidad y tamaño.

Cuando el factor de carga real alcanza el factor de carga especificado, el número de cubos aumenta automáticamente al número primo más pequeño que es mayor que dos veces el número actual de cubos.

El proveedor de código hash dispensa códigos hash para las claves del Hashtable objeto . El proveedor de código hash predeterminado es la implementación de la clave de Object.GetHashCode.

El comparador determina si dos claves son iguales. Cada clave de un Hashtable elemento debe ser única. El comparador predeterminado es la implementación de la clave de Object.Equals.

El proveedor de código hash personalizado y el comparador personalizado habilitan escenarios como realizar búsquedas con cadenas que no distinguen mayúsculas de minúsculas.

Los elementos del nuevo Hashtable se ordenan en el mismo orden en el que el enumerador recorre en iteración el IDictionary objeto .

Este constructor es una O(n) operación, donde n es el número de elementos del d parámetro .

Se aplica a

Hashtable(Int32, Single, IEqualityComparer)

Inicializa una nueva instancia vacía de la Hashtable clase utilizando la capacidad inicial, el factor de carga y IEqualityComparer el 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

Número aproximado de elementos que el Hashtable objeto puede contener inicialmente.

loadFactor
Single

Número del intervalo comprendido entre 0,1 y 1,0 multiplicado por el valor predeterminado que proporciona el mejor rendimiento. El resultado es la relación máxima de elementos a cubos.

equalityComparer
IEqualityComparer

Objeto IEqualityComparer que define el proveedor de código hash y el comparador que se va a usar con .Hashtable

O bien

null para usar el proveedor de código hash predeterminado y el comparador predeterminado. El proveedor de código hash predeterminado es la implementación de cada clave de GetHashCode() y el comparador predeterminado es la implementación de cada clave de Equals(Object).

Excepciones

capacity es menor que cero.

O bien

loadFactor es menor que 0,1.

O bien

loadFactor es mayor que 1,0.

Ejemplos

En el ejemplo de código siguiente se crean tablas hash con constructores diferentes Hashtable y se muestran las diferencias en el comportamiento de las tablas hash, incluso si cada una contiene los mismos 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

Comentarios

La especificación de la capacidad inicial elimina la necesidad de realizar una serie de operaciones de cambio de tamaño al agregar elementos al Hashtable objeto . La capacidad aumenta automáticamente según sea necesario en función del factor de carga.

El factor de carga es la relación máxima de elementos con los cubos. Un factor de carga más pequeño significa una búsqueda más rápida en el costo del aumento del consumo de memoria. Un factor de carga de 1,0 es el mejor equilibrio entre velocidad y tamaño.

Cuando el factor de carga real alcanza el factor de carga especificado, el número de cubos aumenta automáticamente al número primo más pequeño que es mayor que dos veces el número actual de cubos.

El IEqualityComparer objeto incluye tanto el proveedor de código hash como el comparador. Si se usa en IEqualityComparer el Hashtable constructor , los objetos usados como claves en Hashtable no son necesarios para invalidar los Object.GetHashCode métodos y Object.Equals .

El proveedor de código hash dispensa códigos hash para las claves de Hashtable. El proveedor de código hash predeterminado es la implementación de la clave de Object.GetHashCode.

El comparador determina si dos claves son iguales. Cada clave de un Hashtable elemento debe ser única. El comparador predeterminado es la implementación de la clave de Object.Equals.

Habilita IEqualityComparer escenarios como realizar búsquedas con cadenas que no distinguen mayúsculas de minúsculas.

Este constructor es una O(n) operación, donde n es el capacity parámetro .

Consulte también

Se aplica a

Hashtable(Int32, IHashCodeProvider, IComparer)

Precaución

Please use Hashtable(int, IEqualityComparer) instead.

Inicializa una nueva instancia vacía de la Hashtable clase utilizando la capacidad inicial especificada, el proveedor de código hash, el comparador y el factor de carga predeterminado.

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

Número aproximado de elementos que el Hashtable objeto puede contener inicialmente.

hcp
IHashCodeProvider

Objeto IHashCodeProvider que proporciona los códigos hash para todas las claves de Hashtable.

O bien

null para usar el proveedor de código hash predeterminado, que es la implementación de cada clave de GetHashCode().

comparer
IComparer

Objeto IComparer que se va a usar para determinar si dos claves son iguales.

O bien

null para usar el comparador predeterminado, que es la implementación de cada clave de Equals(Object).

Atributos

Excepciones

capacity es menor que cero.

Comentarios

La especificación de la capacidad inicial elimina la necesidad de realizar una serie de operaciones de cambio de tamaño al agregar elementos al Hashtable objeto . La capacidad aumenta automáticamente según sea necesario en función del factor de carga.

El factor de carga es la relación máxima de elementos con los cubos. Un factor de carga más pequeño significa una búsqueda más rápida en el costo del aumento del consumo de memoria.

Cuando el factor de carga real alcanza el factor de carga especificado, el número de cubos aumenta automáticamente al número primo más pequeño que es mayor que dos veces el número actual de cubos.

El proveedor de código hash dispensa códigos hash para las claves de Hashtable. El proveedor de código hash predeterminado es la implementación de la clave de Object.GetHashCode.

El comparador determina si dos claves son iguales. Cada clave de un Hashtable elemento debe ser única. El comparador predeterminado es la implementación de la clave de Object.Equals.

El proveedor de código hash personalizado y el comparador personalizado habilitan escenarios como realizar búsquedas con cadenas que no distinguen mayúsculas de minúsculas.

Este constructor es una O(n) operación, donde n es el capacity parámetro .

Consulte también

Se aplica a

Hashtable(IDictionary, Single, IEqualityComparer)

Inicializa una nueva instancia de la Hashtable clase copiando los elementos del diccionario especificado en el nuevo Hashtable objeto. El nuevo Hashtable objeto tiene una capacidad inicial igual al número de elementos copiados y usa el factor de carga y IEqualityComparer el 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

Objeto IDictionary que se va a copiar en un nuevo Hashtable objeto.

loadFactor
Single

Número del intervalo comprendido entre 0,1 y 1,0 multiplicado por el valor predeterminado que proporciona el mejor rendimiento. El resultado es la relación máxima de elementos a cubos.

equalityComparer
IEqualityComparer

Objeto IEqualityComparer que define el proveedor de código hash y el comparador que se va a usar con .Hashtable

O bien

null para usar el proveedor de código hash predeterminado y el comparador predeterminado. El proveedor de código hash predeterminado es la implementación de cada clave de GetHashCode() y el comparador predeterminado es la implementación de cada clave de Equals(Object).

Excepciones

loadFactor es menor que 0,1.

O bien

loadFactor es mayor que 1,0.

Ejemplos

En el ejemplo de código siguiente se crean tablas hash con constructores diferentes Hashtable y se muestran las diferencias en el comportamiento de las tablas hash, incluso si cada una contiene los mismos 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

Comentarios

La capacidad inicial se establece en el número de elementos del diccionario de origen. La capacidad aumenta automáticamente según sea necesario en función del factor de carga.

El factor de carga es la relación máxima de elementos con los cubos. Un factor de carga más pequeño significa una búsqueda más rápida en el costo del aumento del consumo de memoria. Un factor de carga de 1,0 es el mejor equilibrio entre velocidad y tamaño.

Cuando el factor de carga real alcanza el factor de carga especificado, el número de cubos aumenta automáticamente al número primo más pequeño que es mayor que dos veces el número actual de cubos.

El IEqualityComparer objeto incluye tanto el proveedor de código hash como el comparador. Si se usa en IEqualityComparer el Hashtable constructor , los objetos usados como claves en el Hashtable objeto no son necesarios para invalidar los Object.GetHashCode métodos y Object.Equals .

El proveedor de código hash dispensa códigos hash para las claves de Hashtable. El proveedor de código hash predeterminado es la implementación de la clave de Object.GetHashCode.

El comparador determina si dos claves son iguales. Cada clave de un Hashtable elemento debe ser única. El comparador predeterminado es la implementación de la clave de Object.Equals.

Habilita IEqualityComparer escenarios como realizar búsquedas con cadenas que no distinguen mayúsculas de minúsculas.

Los elementos del nuevo Hashtable se ordenan en el mismo orden en el que el enumerador recorre en iteración el IDictionary objeto .

Este constructor es una O(n) operación, donde n es el número de elementos del d parámetro .

Consulte también

Se aplica a

Hashtable(IDictionary, IHashCodeProvider, IComparer)

Precaución

Please use Hashtable(IDictionary, IEqualityComparer) instead.

Inicializa una nueva instancia de la Hashtable clase copiando los elementos del diccionario especificado en el nuevo Hashtable objeto. El nuevo Hashtable objeto tiene una capacidad inicial igual al número de elementos copiados y usa el factor de carga predeterminado y el proveedor de código hash y comparador especificados. Esta API está obsoleta. Para obtener una 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

Objeto IDictionary que se va a copiar en un nuevo Hashtable objeto.

hcp
IHashCodeProvider

Objeto IHashCodeProvider que proporciona los códigos hash para todas las claves de Hashtable.

O bien

null para usar el proveedor de código hash predeterminado, que es la implementación de cada clave de GetHashCode().

comparer
IComparer

Objeto IComparer que se va a usar para determinar si dos claves son iguales.

O bien

null para usar el comparador predeterminado, que es la implementación de cada clave de Equals(Object).

Atributos

Excepciones

Comentarios

La capacidad inicial se establece en el número de elementos del diccionario de origen. La capacidad aumenta automáticamente según sea necesario en función del factor de carga.

El factor de carga es la relación máxima de elementos con los cubos. Un factor de carga más pequeño significa una búsqueda más rápida en el costo del aumento del consumo de memoria.

Cuando el factor de carga real alcanza el factor de carga especificado, el número de cubos aumenta automáticamente al número primo más pequeño que es mayor que dos veces el número actual de cubos.

El proveedor de código hash dispensa códigos hash para las claves del Hashtable objeto . El proveedor de código hash predeterminado es la implementación de la clave de Object.GetHashCode.

El comparador determina si dos claves son iguales. Cada clave de un Hashtable elemento debe ser única. El comparador predeterminado es la implementación de la clave de Object.Equals.

El proveedor de código hash personalizado y el comparador personalizado habilitan escenarios como realizar búsquedas con cadenas que no distinguen mayúsculas de minúsculas.

Los elementos del nuevo Hashtable se ordenan en el mismo orden en el que el enumerador recorre en iteración el IDictionary objeto .

Este constructor es una O(n) operación, donde n es el número de elementos del d parámetro .

Consulte también

Se aplica a

Hashtable(Int32, Single)

Inicializa una nueva instancia vacía de la Hashtable clase utilizando la capacidad inicial y el factor de carga especificados, así como el proveedor y comparador de código hash predeterminados.

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

Número aproximado de elementos que el Hashtable objeto puede contener inicialmente.

loadFactor
Single

Número del intervalo comprendido entre 0,1 y 1,0 multiplicado por el valor predeterminado que proporciona el mejor rendimiento. El resultado es la relación máxima de elementos a cubos.

Excepciones

capacity es menor que cero.

O bien

loadFactor es menor que 0,1.

O bien

loadFactor es mayor que 1,0.

capacity está causando un desbordamiento.

Ejemplos

En el ejemplo de código siguiente se crean tablas hash con constructores diferentes Hashtable y se muestran las diferencias en el comportamiento de las tablas hash, incluso si cada una contiene los mismos 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

Comentarios

La especificación de la capacidad inicial elimina la necesidad de realizar una serie de operaciones de cambio de tamaño al agregar elementos al Hashtable objeto . La capacidad aumenta automáticamente según sea necesario en función del factor de carga.

El factor de carga es la relación máxima de elementos con los cubos. Un factor de carga más pequeño significa una búsqueda más rápida en el costo del aumento del consumo de memoria. Un factor de carga de 1,0 es el mejor equilibrio entre velocidad y tamaño.

Cuando el factor de carga real alcanza el factor de carga especificado, el número de cubos aumenta automáticamente al número primo más pequeño que es mayor que dos veces el número actual de cubos.

El proveedor de código hash dispensa códigos hash para las claves de Hashtable. El proveedor de código hash predeterminado es la implementación de la clave de Object.GetHashCode.

El comparador determina si dos claves son iguales. Cada clave de un Hashtable elemento debe ser única. El comparador predeterminado es la implementación de la clave de Object.Equals.

Este constructor es una O(n) operación, donde n es el capacity parámetro .

Consulte también

Se aplica a

Hashtable(SerializationInfo, StreamingContext)

Inicializa una nueva instancia vacía de la Hashtable clase que se puede serializar mediante los objetos y SerializationInfo especificadosStreamingContext.

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

Objeto SerializationInfo que contiene la información necesaria para serializar el Hashtable objeto.

context
StreamingContext

Objeto StreamingContext que contiene el origen y el destino de la secuencia serializada asociada a Hashtable.

Excepciones

info es null.

Comentarios

La capacidad de una tabla hash se usa para calcular el número óptimo de cubos de tabla hash en función del factor de carga. La capacidad aumenta automáticamente según sea necesario.

El factor de carga es la relación máxima de elementos con los cubos. Un factor de carga más pequeño significa una búsqueda más rápida en el costo del aumento del consumo de memoria.

Cuando el factor de carga real alcanza el factor de carga especificado, el número de cubos aumenta automáticamente al número primo más pequeño que es mayor que dos veces el número actual de cubos.

El proveedor de código hash dispensa códigos hash para las claves del Hashtable objeto . El proveedor de código hash predeterminado es la implementación de la clave de Object.GetHashCode.

El comparador determina si dos claves son iguales. Cada clave de un Hashtable elemento debe ser única. El comparador predeterminado es la implementación de la clave de Object.Equals.

Este constructor es una O(n) operación, donde n es Count.

Dado que serializar y deserializar un enumerador para un Hashtable puede hacer que los elementos se reordenen, no es posible continuar la enumeración sin llamar al Reset método .

Consulte también

Se aplica a

Hashtable(IHashCodeProvider, IComparer)

Precaución

Please use Hashtable(IEqualityComparer) instead.

Inicializa una nueva instancia vacía de la Hashtable clase mediante la capacidad inicial predeterminada y el factor de carga, y el proveedor de código hash y 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

Objeto IHashCodeProvider que proporciona los códigos hash para todas las claves del Hashtable objeto .

O bien

null para usar el proveedor de código hash predeterminado, que es la implementación de cada clave de GetHashCode().

comparer
IComparer

Objeto IComparer que se va a usar para determinar si dos claves son iguales.

O bien

null para usar el comparador predeterminado, que es la implementación de cada clave de Equals(Object).

Atributos

Comentarios

La capacidad de una tabla hash se usa para calcular el número óptimo de cubos de tabla hash en función del factor de carga. La capacidad aumenta automáticamente según sea necesario.

El factor de carga es la relación máxima de elementos con los cubos. Un factor de carga más pequeño significa una búsqueda más rápida en el costo del aumento del consumo de memoria.

Cuando el factor de carga real alcanza el factor de carga especificado, el número de cubos aumenta automáticamente al número primo más pequeño que es mayor que dos veces el número actual de cubos.

El proveedor de código hash dispensa códigos hash para las claves del Hashtable objeto . El proveedor de código hash predeterminado es la implementación de la clave de Object.GetHashCode.

El comparador determina si dos claves son iguales. Cada clave de un Hashtable elemento debe ser única. El comparador predeterminado es la implementación de la clave de Object.Equals.

El proveedor de código hash personalizado y el comparador personalizado habilitan escenarios como realizar búsquedas con cadenas que no distinguen mayúsculas de minúsculas.

Este constructor es una O(1) operación.

Consulte también

Se aplica a

Hashtable(IDictionary, Single)

Inicializa una nueva instancia de la Hashtable clase copiando los elementos del diccionario especificado en el nuevo Hashtable objeto. El nuevo Hashtable objeto tiene una capacidad inicial igual al número de elementos copiados y usa el factor de carga especificado y el proveedor de código hash predeterminado y comparador.

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

Objeto IDictionary que se va a copiar en un nuevo Hashtable objeto.

loadFactor
Single

Número del intervalo comprendido entre 0,1 y 1,0 multiplicado por el valor predeterminado que proporciona el mejor rendimiento. El resultado es la relación máxima de elementos a cubos.

Excepciones

loadFactor es menor que 0,1.

O bien

loadFactor es mayor que 1,0.

Ejemplos

En el ejemplo de código siguiente se crean tablas hash con constructores diferentes Hashtable y se muestran las diferencias en el comportamiento de las tablas hash, incluso si cada una contiene los mismos 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

Comentarios

La capacidad inicial se establece en el número de elementos del diccionario de origen. La capacidad aumenta automáticamente según sea necesario en función del factor de carga.

El factor de carga es la relación máxima de elementos con los cubos. Un factor de carga más pequeño significa una búsqueda más rápida en el costo del aumento del consumo de memoria. Un factor de carga de 1,0 es el mejor equilibrio entre velocidad y tamaño.

Cuando el factor de carga real alcanza el factor de carga especificado, el número de cubos aumenta automáticamente al número primo más pequeño que es mayor que dos veces el número actual de cubos.

El proveedor de código hash dispensa códigos hash para las claves del Hashtable objeto . El proveedor de código hash predeterminado es la implementación de la clave de Object.GetHashCode.

El comparador determina si dos claves son iguales. Cada clave de un Hashtable elemento debe ser única. El comparador predeterminado es la implementación de la clave de Object.Equals.

Los elementos del nuevo Hashtable se ordenan en el mismo orden en el que el enumerador recorre en iteración el IDictionary objeto .

Este constructor es una O(n) operación, donde n es el número de elementos del d parámetro .

Consulte también

Se aplica a

Hashtable(IDictionary, IEqualityComparer)

Inicializa una nueva instancia de la Hashtable clase copiando los elementos del diccionario especificado en un nuevo Hashtable objeto. El nuevo Hashtable objeto tiene una capacidad inicial igual al número de elementos copiados y usa el factor de carga predeterminado y el 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

Objeto IDictionary que se va a copiar en un nuevo Hashtable objeto.

equalityComparer
IEqualityComparer

Objeto IEqualityComparer que define el proveedor de código hash y el comparador que se va a usar con .Hashtable

O bien

null para usar el proveedor de código hash predeterminado y el comparador predeterminado. El proveedor de código hash predeterminado es la implementación de cada clave de GetHashCode() y el comparador predeterminado es la implementación de cada clave de Equals(Object).

Excepciones

Ejemplos

En el ejemplo de código siguiente se crean tablas hash con constructores diferentes Hashtable y se muestran las diferencias en el comportamiento de las tablas hash, incluso si cada una contiene los mismos 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

Comentarios

La capacidad inicial se establece en el número de elementos del diccionario de origen. La capacidad aumenta automáticamente según sea necesario en función del factor de carga.

El factor de carga es la relación máxima de elementos con los cubos. Un factor de carga más pequeño significa una búsqueda más rápida en el costo del aumento del consumo de memoria.

Cuando el factor de carga real alcanza el factor de carga especificado, el número de cubos aumenta automáticamente al número primo más pequeño que es mayor que dos veces el número actual de cubos.

El IEqualityComparer objeto incluye tanto el proveedor de código hash como el comparador. Si se usa en IEqualityComparer el Hashtable constructor , los objetos usados como claves en el Hashtable objeto no son necesarios para invalidar los Object.GetHashCode métodos y Object.Equals .

El proveedor de código hash dispensa códigos hash para las claves de Hashtable. El proveedor de código hash predeterminado es la implementación de la clave de Object.GetHashCode.

El comparador determina si dos claves son iguales. Cada clave de un Hashtable elemento debe ser única. El comparador predeterminado es la implementación de la clave de Object.Equals.

Habilita IEqualityComparer escenarios como realizar búsquedas con cadenas que no distinguen mayúsculas de minúsculas.

Los elementos del nuevo Hashtable se ordenan en el mismo orden en el que el enumerador recorre en iteración el IDictionary objeto .

Este constructor es una O(n) operación, donde n es el número de elementos del d parámetro .

Consulte también

Se aplica a

Hashtable(Int32)

Inicializa una nueva instancia vacía de la Hashtable clase mediante la capacidad inicial especificada y el factor de carga predeterminado, el proveedor de código hash y el 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

Número aproximado de elementos que el Hashtable objeto puede contener inicialmente.

Excepciones

capacity es menor que cero.

Ejemplos

En el ejemplo de código siguiente se crean tablas hash con constructores diferentes Hashtable y se muestran las diferencias en el comportamiento de las tablas hash, incluso si cada una contiene los mismos 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

Comentarios

La especificación de la capacidad inicial elimina la necesidad de realizar una serie de operaciones de cambio de tamaño al agregar elementos al Hashtable objeto . La capacidad aumenta automáticamente según sea necesario en función del factor de carga.

El factor de carga es la relación máxima de elementos con los cubos. Un factor de carga más pequeño significa una búsqueda más rápida en el costo del aumento del consumo de memoria.

Cuando el factor de carga real alcanza el factor de carga especificado, el número de cubos aumenta automáticamente al número primo más pequeño que es mayor que dos veces el número actual de cubos.

El proveedor de código hash dispensa códigos hash para las claves de Hashtable. El proveedor de código hash predeterminado es la implementación de la clave de Object.GetHashCode.

El comparador determina si dos claves son iguales. Cada clave de un Hashtable elemento debe ser única. El comparador predeterminado es la implementación de la clave de Object.Equals.

Este constructor es una O(n) operación, donde n es capacity.

Consulte también

Se aplica a

Hashtable(IEqualityComparer)

Inicializa una nueva instancia vacía de la Hashtable clase utilizando la capacidad inicial predeterminada y el factor de carga, y el 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

Objeto IEqualityComparer que define el proveedor de código hash y el comparador que se va a usar con el Hashtable objeto .

O bien

null para usar el proveedor de código hash predeterminado y el comparador predeterminado. El proveedor de código hash predeterminado es la implementación de cada clave de GetHashCode() y el comparador predeterminado es la implementación de cada clave de Equals(Object).

Ejemplos

En el ejemplo de código siguiente se crean tablas hash con constructores diferentes Hashtable y se muestran las diferencias en el comportamiento de las tablas hash, incluso si cada una contiene los mismos 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

Comentarios

La capacidad de una tabla hash se usa para calcular el número óptimo de cubos de tabla hash en función del factor de carga. La capacidad aumenta automáticamente según sea necesario.

El factor de carga es la relación máxima de elementos con los cubos. Un factor de carga más pequeño significa una búsqueda más rápida en el costo del aumento del consumo de memoria.

Cuando el factor de carga real alcanza el factor de carga especificado, el número de cubos aumenta automáticamente al número primo más pequeño que es mayor que dos veces el número actual de cubos.

El IEqualityComparer objeto incluye tanto el proveedor de código hash como el comparador. Si se usa en IEqualityComparer el Hashtable constructor , los objetos usados como claves en el Hashtable objeto no son necesarios para invalidar los Object.GetHashCode métodos y Object.Equals .

El proveedor de código hash dispensa códigos hash para las claves de Hashtable. El proveedor de código hash predeterminado es la implementación de la clave de Object.GetHashCode.

El comparador determina si dos claves son iguales. Cada clave de un Hashtable elemento debe ser única. El comparador predeterminado es la implementación de la clave de Object.Equals.

Habilita IEqualityComparer escenarios como realizar búsquedas con cadenas que no distinguen mayúsculas de minúsculas.

Este constructor es una O(1) operación.

Consulte también

Se aplica a

Hashtable(IDictionary)

Inicializa una nueva instancia de la Hashtable clase copiando los elementos del diccionario especificado en el nuevo Hashtable objeto. El nuevo Hashtable objeto tiene una capacidad inicial igual al número de elementos copiados y usa el factor de carga predeterminado, el proveedor de código hash y el 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

Objeto IDictionary que se va a copiar en un nuevo Hashtable objeto.

Excepciones

Ejemplos

En el ejemplo de código siguiente se crean tablas hash con constructores diferentes Hashtable y se muestran las diferencias en el comportamiento de las tablas hash, incluso si cada una contiene los mismos 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

Comentarios

La capacidad inicial se establece en el número de elementos del diccionario de origen. La capacidad aumenta automáticamente según sea necesario en función del factor de carga.

El factor de carga es la relación máxima de elementos con los cubos. Un factor de carga más pequeño significa una búsqueda más rápida en el costo del aumento del consumo de memoria.

Cuando el factor de carga real alcanza el factor de carga especificado, el número de cubos aumenta automáticamente al número primo más pequeño que es mayor que dos veces el número actual de cubos.

El proveedor de código hash dispensa códigos hash para las claves del Hashtable objeto . El proveedor de código hash predeterminado es la implementación de la clave de Object.GetHashCode.

El comparador determina si dos claves son iguales. Cada clave de un Hashtable elemento debe ser única. El comparador predeterminado es la implementación de la clave de Object.Equals.

Los elementos del nuevo Hashtable se ordenan en el mismo orden en el que el enumerador recorre en iteración el IDictionary objeto .

Este constructor es una O(n) operación, donde n es el número de elementos del d parámetro .

Consulte también

Se aplica a

Hashtable(Int32, IEqualityComparer)

Inicializa una nueva instancia vacía de la Hashtable clase utilizando la capacidad inicial especificada y IEqualityComparer, y el factor de carga predeterminado.

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

Número aproximado de elementos que el Hashtable objeto puede contener inicialmente.

equalityComparer
IEqualityComparer

Objeto IEqualityComparer que define el proveedor de código hash y el comparador que se va a usar con .Hashtable

O bien

null para usar el proveedor de código hash predeterminado y el comparador predeterminado. El proveedor de código hash predeterminado es la implementación de cada clave de GetHashCode() y el comparador predeterminado es la implementación de cada clave de Equals(Object).

Excepciones

capacity es menor que cero.

Ejemplos

En el ejemplo de código siguiente se crean tablas hash con constructores diferentes Hashtable y se muestran las diferencias en el comportamiento de las tablas hash, incluso si cada una contiene los mismos 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

Comentarios

La especificación de la capacidad inicial elimina la necesidad de realizar una serie de operaciones de cambio de tamaño al agregar elementos al Hashtable objeto . La capacidad aumenta automáticamente según sea necesario en función del factor de carga.

El factor de carga es la relación máxima de elementos con los cubos. Un factor de carga más pequeño significa una búsqueda más rápida en el costo del aumento del consumo de memoria.

Cuando el factor de carga real alcanza el factor de carga especificado, el número de cubos aumenta automáticamente al número primo más pequeño que es mayor que dos veces el número actual de cubos.

El IEqualityComparer objeto incluye tanto el proveedor de código hash como el comparador. Si se usa en IEqualityComparer el Hashtable constructor , los objetos usados como claves en Hashtable no son necesarios para invalidar los Object.GetHashCode métodos y Object.Equals .

El proveedor de código hash dispensa códigos hash para las claves de Hashtable. El proveedor de código hash predeterminado es la implementación de la clave de Object.GetHashCode.

El comparador determina si dos claves son iguales. Cada clave de un Hashtable elemento debe ser única. El comparador predeterminado es la implementación de la clave de Object.Equals.

Habilita IEqualityComparer escenarios como realizar búsquedas con cadenas que no distinguen mayúsculas de minúsculas.

Este constructor es una O(n) operación, donde n es el capacity parámetro .

Consulte también

Se aplica a