Hashtable Constructores
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Inicializa una nueva instancia de la clase Hashtable.
Sobrecargas
Hashtable() |
Inicializa una nueva instancia vacía de la clase Hashtable utilizando la capacidad inicial, el factor de carga, el proveedor de código hash y el comparador predeterminados. |
Hashtable(Int32, Single, IHashCodeProvider, IComparer) |
Obsoletos.
Obsoletos.
Inicializa una nueva instancia vacía de la clase Hashtable utilizando la capacidad inicial, el factor de carga, el proveedor de código hash y el comparador especificados. |
Hashtable(IDictionary, Single, IHashCodeProvider, IComparer) |
Obsoletos.
Obsoletos.
Inicializa una nueva instancia de la clase Hashtable copiando los elementos del diccionario especificado en el nuevo objeto Hashtable. El nuevo objeto Hashtable tiene una capacidad inicial igual al número de elementos copiados, y utiliza 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 clase Hashtable utilizando la capacidad inicial, el factor de carga y el objeto IEqualityComparer especificados. |
Hashtable(Int32, IHashCodeProvider, IComparer) |
Obsoletos.
Obsoletos.
Inicializa una nueva instancia vacía de la clase Hashtable utilizando la capacidad inicial, el proveedor de código hash y el comparador especificados, y el factor de carga predeterminado. |
Hashtable(IDictionary, Single, IEqualityComparer) |
Inicializa una nueva instancia de la clase Hashtable copiando los elementos del diccionario especificado en el nuevo objeto Hashtable. El nuevo objeto Hashtable tiene una capacidad inicial igual al número de elementos copiados, y utiliza el factor de carga y el objeto IEqualityComparer especificados. |
Hashtable(IDictionary, IHashCodeProvider, IComparer) |
Obsoletos.
Obsoletos.
Inicializa una nueva instancia de la clase Hashtable copiando los elementos del diccionario especificado en el nuevo objeto Hashtable. El nuevo objeto Hashtable tiene una capacidad inicial igual al número de elementos copiados, utiliza el factor de carga predeterminado, y el proveedor de código hash y comparador especificados. Esta API está obsoleta. Para una alternativa, vea Hashtable(IDictionary, IEqualityComparer). |
Hashtable(Int32, Single) |
Inicializa una nueva instancia vacía de la clase Hashtable utilizando la capacidad inicial y el factor de carga especificados, y el proveedor de código hash y el comparador predeterminados. |
Hashtable(SerializationInfo, StreamingContext) |
Obsoletos.
Inicializa una nueva instancia vacía de la clase Hashtable que es serializable, utilizando los objetos SerializationInfo y StreamingContext especificados. |
Hashtable(IHashCodeProvider, IComparer) |
Obsoletos.
Obsoletos.
Obsoletos.
Inicializa una nueva instancia vacía de la clase Hashtable utilizando la capacidad inicial y el factor de carga predeterminados, y el proveedor de código hash y el comparador especificados. |
Hashtable(IDictionary, Single) |
Inicializa una nueva instancia de la clase Hashtable copiando los elementos del diccionario especificado en el nuevo objeto Hashtable. El nuevo objeto Hashtable tiene una capacidad inicial igual al número de elementos copiados, utiliza el factor de carga especificado, y el proveedor de código hash y comparador predeterminados. |
Hashtable(IDictionary, IEqualityComparer) |
Inicializa una nueva instancia de la clase Hashtable copiando los elementos del diccionario especificado en un nuevo objeto Hashtable. El nuevo objeto Hashtable tiene una capacidad inicial igual al número de elementos copiados, y utiliza el factor de carga predeterminado y el objeto IEqualityComparer especificado. |
Hashtable(Int32) |
Inicializa una nueva instancia vacía de la clase Hashtable utilizando la capacidad inicial especificada, y el factor de carga, el proveedor de código hash y el comparador predeterminados. |
Hashtable(IEqualityComparer) |
Inicializa una nueva instancia vacía de la clase Hashtable utilizando la capacidad inicial y el factor de carga predeterminados, y el objeto IEqualityComparer especificado. |
Hashtable(IDictionary) |
Inicializa una nueva instancia de la clase Hashtable copiando los elementos del diccionario especificado en el nuevo objeto Hashtable. El nuevo objeto Hashtable tiene una capacidad inicial igual al número de elementos copiados, y utiliza el factor de carga, el proveedor de código hash y comparador predeterminados. |
Hashtable(Int32, IEqualityComparer) |
Inicializa una nueva instancia vacía de la clase Hashtable utilizando la capacidad inicial y el objeto IEqualityComparer especificados, y el factor de carga predeterminado. |
Hashtable()
- Source:
- Hashtable.cs
- Source:
- Hashtable.cs
- Source:
- Hashtable.cs
Inicializa una nueva instancia vacía de la clase Hashtable utilizando la capacidad inicial, el factor de carga, el proveedor de código hash y el comparador predeterminados.
public:
Hashtable();
public Hashtable ();
Public Sub New ()
Ejemplos
En el ejemplo de código siguiente se crean tablas hash con distintos Hashtable constructores y se muestran las diferencias en el comportamiento de las tablas hash, incluso si cada una contiene los mismos elementos.
using namespace System;
using namespace System::Collections;
using namespace System::Globalization;
ref class myComparer : IEqualityComparer
{
public:
virtual bool Equals(Object^ x, Object^ y)
{
return x->Equals(y);
}
virtual int GetHashCode(Object^ obj)
{
return obj->ToString()->ToLower()->GetHashCode();
}
};
ref class myCultureComparer : IEqualityComparer
{
private:
CaseInsensitiveComparer^ myComparer;
public:
myCultureComparer()
{
myComparer = CaseInsensitiveComparer::DefaultInvariant;
}
myCultureComparer(CultureInfo^ myCulture)
{
myComparer = gcnew CaseInsensitiveComparer(myCulture);
}
virtual bool Equals(Object^ x, Object^ y)
{
if (myComparer->Compare(x, y) == 0)
{
return true;
}
else
{
return false;
}
}
virtual int GetHashCode(Object^ obj)
{
return obj->ToString()->ToLower()->GetHashCode();
}
};
int main()
{
// Create a hash table using the default hash code provider and the default comparer.
Hashtable^ myHT1 = gcnew Hashtable((IEqualityComparer^)nullptr);
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.
Hashtable^ myHT2 = gcnew Hashtable(gcnew 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 = gcnew 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".
CultureInfo^ myCul = gcnew CultureInfo("tr-TR");
Hashtable^ myHT4 = gcnew Hashtable( gcnew 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: {0}", myHT1->ContainsKey( "first" ) );
Console::WriteLine( "first is in myHT2: {0}", myHT2->ContainsKey( "first" ) );
Console::WriteLine( "first is in myHT3: {0}", myHT3->ContainsKey( "first" ) );
Console::WriteLine( "first is in myHT4: {0}", 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
*/
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 se incrementa 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 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)
- Source:
- Hashtable.cs
- Source:
- Hashtable.cs
- Source:
- Hashtable.cs
Precaución
Please use Hashtable(int, float, IEqualityComparer) instead.
Precaución
This constructor has been deprecated. Use Hashtable(int, float, IEqualityComparer) instead.
Inicializa una nueva instancia vacía de la clase Hashtable utilizando 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);
[System.Obsolete("Please use Hashtable(int, float, IEqualityComparer) instead.")]
public Hashtable (int capacity, float loadFactor, System.Collections.IHashCodeProvider? hcp, System.Collections.IComparer? comparer);
[System.Obsolete("This constructor has been deprecated. Use Hashtable(int, float, IEqualityComparer) instead.")]
public Hashtable (int capacity, float loadFactor, System.Collections.IHashCodeProvider? hcp, System.Collections.IComparer? comparer);
[System.Obsolete("Please use Hashtable(int, float, IEqualityComparer) instead.")]
public Hashtable (int capacity, float loadFactor, System.Collections.IHashCodeProvider hcp, System.Collections.IComparer comparer);
public Hashtable (int capacity, float loadFactor, System.Collections.IHashCodeProvider hcp, System.Collections.IComparer comparer);
[<System.Obsolete("Please use Hashtable(int, float, IEqualityComparer) instead.")>]
new System.Collections.Hashtable : int * single * System.Collections.IHashCodeProvider * System.Collections.IComparer -> System.Collections.Hashtable
[<System.Obsolete("This constructor has been deprecated. Use Hashtable(int, float, IEqualityComparer) instead.")>]
new System.Collections.Hashtable : int * single * System.Collections.IHashCodeProvider * System.Collections.IComparer -> System.Collections.Hashtable
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
- loadFactor
- Single
Número incluido en el intervalo de 0,1 a 1,0 que se multiplica por el valor predeterminado que proporciona el mejor rendimiento. El resultado es la relación máxima de elementos por sectores de almacenamiento.
Objeto IHashCodeProvider que suministra los códigos hash de todas las claves de Hashtable.
o bien
null
para utilizar el proveedor predeterminado de código hash, que es la implementación de GetHashCode() de cada clave.
- comparer
- IComparer
Objeto IComparer que se va a utilizar para determinar si dos claves son iguales.
o bien
null
para utilizar 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.
Ejemplos
En el ejemplo de código siguiente se crean tablas hash con distintos Hashtable constructores y se muestran las diferencias en el comportamiento de las tablas hash, incluso si cada una contiene los mismos elementos.
using namespace System;
using namespace System::Collections;
using namespace System::Globalization;
ref class myCultureComparer : public IEqualityComparer
{
public:
CaseInsensitiveComparer^ myComparer;
public:
myCultureComparer()
{
myComparer = CaseInsensitiveComparer::DefaultInvariant;
}
public:
myCultureComparer(CultureInfo^ myCulture)
{
myComparer = gcnew CaseInsensitiveComparer(myCulture);
}
public:
virtual bool Equals(Object^ x, Object^ y)
{
if (myComparer->Compare(x, y) == 0)
{
return true;
}
else
{
return false;
}
}
public:
virtual int GetHashCode(Object^ obj)
{
// Compare the hash code for the lowercase versions of the strings.
return obj->ToString()->ToLower()->GetHashCode();
}
};
public ref class SamplesHashtable
{
public:
static void Main()
{
// Create a hash table using the default comparer.
Hashtable^ myHT1 = gcnew 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 = gcnew Hashtable(3, .8f, gcnew 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 = gcnew CultureInfo("tr-TR");
Hashtable^ myHT3 = gcnew Hashtable(3, .8f, gcnew 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"));
}
};
int main()
{
SamplesHashtable::Main();
}
/*
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
*/
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
Especificar 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 se incrementa 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 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 permiten 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)
- Source:
- Hashtable.cs
- Source:
- Hashtable.cs
- Source:
- Hashtable.cs
Precaución
Please use Hashtable(IDictionary, float, IEqualityComparer) instead.
Precaución
This constructor has been deprecated. Use Hashtable(IDictionary, float, IEqualityComparer) instead.
Inicializa una nueva instancia de la clase Hashtable copiando los elementos del diccionario especificado en el nuevo objeto Hashtable. El nuevo objeto Hashtable tiene una capacidad inicial igual al número de elementos copiados, y utiliza 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);
[System.Obsolete("Please use Hashtable(IDictionary, float, IEqualityComparer) instead.")]
public Hashtable (System.Collections.IDictionary d, float loadFactor, System.Collections.IHashCodeProvider? hcp, System.Collections.IComparer? comparer);
[System.Obsolete("This constructor has been deprecated. Use Hashtable(IDictionary, float, IEqualityComparer) instead.")]
public Hashtable (System.Collections.IDictionary d, float loadFactor, System.Collections.IHashCodeProvider? hcp, System.Collections.IComparer? comparer);
[System.Obsolete("Please use Hashtable(IDictionary, float, IEqualityComparer) instead.")]
public Hashtable (System.Collections.IDictionary d, float loadFactor, System.Collections.IHashCodeProvider hcp, System.Collections.IComparer comparer);
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.")>]
new System.Collections.Hashtable : System.Collections.IDictionary * single * System.Collections.IHashCodeProvider * System.Collections.IComparer -> System.Collections.Hashtable
[<System.Obsolete("This constructor has been deprecated. Use Hashtable(IDictionary, float, IEqualityComparer) instead.")>]
new System.Collections.Hashtable : System.Collections.IDictionary * single * System.Collections.IHashCodeProvider * System.Collections.IComparer -> System.Collections.Hashtable
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
Objeto IDictionary que debe copiarse a un nuevo objeto Hashtable.
- loadFactor
- Single
Número incluido en el intervalo de 0,1 a 1,0 que se multiplica por el valor predeterminado que proporciona el mejor rendimiento. El resultado es la relación máxima de elementos por sectores de almacenamiento.
Objeto IHashCodeProvider que suministra los códigos hash de todas las claves de Hashtable.
o bien
null
para utilizar el proveedor predeterminado de código hash, que es la implementación de GetHashCode() de cada clave.
- comparer
- IComparer
Objeto IComparer que se va a utilizar para determinar si dos claves son iguales.
o bien
null
para utilizar el comparador predeterminado, que es la implementación de cada clave de Equals(Object).
- Atributos
Excepciones
d
es null
.
Ejemplos
En el ejemplo de código siguiente se crean tablas hash con distintos Hashtable constructores y se muestran las diferencias en el comportamiento de las tablas hash, incluso si cada una contiene los mismos elementos.
using namespace System;
using namespace System::Collections;
using namespace System::Globalization;
ref class myCultureComparer : public IEqualityComparer
{
public:
CaseInsensitiveComparer^ myComparer;
public:
myCultureComparer()
{
myComparer = CaseInsensitiveComparer::DefaultInvariant;
}
public:
myCultureComparer(CultureInfo^ myCulture)
{
myComparer = gcnew CaseInsensitiveComparer(myCulture);
}
public:
virtual bool Equals(Object^ x, Object^ y)
{
if (myComparer->Compare(x, y) == 0)
{
return true;
}
else
{
return false;
}
}
public:
virtual int GetHashCode(Object^ obj)
{
// Compare the hash code for the lowercase versions of the strings.
return obj->ToString()->ToLower()->GetHashCode();
}
};
public ref class SamplesHashtable
{
public:
static void Main()
{
// Create the dictionary.
SortedList^ mySL = gcnew SortedList;
mySL->Add( "FIRST", "Hello" );
mySL->Add( "SECOND", "World" );
mySL->Add( "THIRD", "!" );
// Create a hash table using the default hash code provider and the default comparer.
Hashtable^ myHT1 = gcnew Hashtable( mySL, .8f );
// Create a hash table using the specified case-insensitive hash code provider and case-insensitive comparer.
Hashtable^ myHT2 = gcnew Hashtable( mySL, .8f, gcnew myCultureComparer() );
// Create a hash table using the specified KeyComparer.
// The KeyComparer uses a case-insensitive hash code provider and a case-insensitive comparer,
// which are based on the Turkish culture (tr-TR), where "I" is not the uppercase version of "i".
CultureInfo^ myCul = gcnew CultureInfo( "tr-TR" );
Hashtable^ myHT3 = gcnew Hashtable( mySL, .8f, gcnew 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" ) );
}
};
int main()
{
SamplesHashtable::Main();
}
/*
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
*/
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 depósitos. 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 depósitos aumenta automáticamente al número primo más pequeño que es mayor que el doble del 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 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)
- Source:
- Hashtable.cs
- Source:
- Hashtable.cs
- Source:
- Hashtable.cs
Inicializa una nueva instancia vacía de la clase Hashtable utilizando la capacidad inicial, el factor de carga y el objeto IEqualityComparer especificados.
public:
Hashtable(int capacity, float loadFactor, System::Collections::IEqualityComparer ^ equalityComparer);
public Hashtable (int capacity, float loadFactor, System.Collections.IEqualityComparer equalityComparer);
public Hashtable (int capacity, float loadFactor, System.Collections.IEqualityComparer? equalityComparer);
new System.Collections.Hashtable : int * single * System.Collections.IEqualityComparer -> System.Collections.Hashtable
Public Sub New (capacity As Integer, loadFactor As Single, equalityComparer As IEqualityComparer)
Parámetros
- loadFactor
- Single
Número incluido en el intervalo de 0,1 a 1,0 que se multiplica por el valor predeterminado que proporciona el mejor rendimiento. El resultado es la relación máxima de elementos por sectores de almacenamiento.
- equalityComparer
- IEqualityComparer
Objeto IEqualityComparer que define el proveedor de código hash y el comparador que se van a usar con Hashtable.
o bien
null
para utilizar el proveedor de código hash y el comparador predeterminados. El proveedor de código hash predeterminado es la implementación del GetHashCode() de cada clave y el comparador predeterminado es la implementación del Equals(Object) de cada clave.
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 distintos Hashtable constructores y se muestran las diferencias en el comportamiento de las tablas hash, incluso si cada una contiene los mismos elementos.
using namespace System;
using namespace System::Collections;
using namespace System::Globalization;
ref class myCultureComparer : public IEqualityComparer
{
public:
CaseInsensitiveComparer^ myComparer;
public:
myCultureComparer()
{
myComparer = CaseInsensitiveComparer::DefaultInvariant;
}
public:
myCultureComparer(CultureInfo^ myCulture)
{
myComparer = gcnew CaseInsensitiveComparer(myCulture);
}
public:
virtual bool Equals(Object^ x, Object^ y)
{
if (myComparer->Compare(x, y) == 0)
{
return true;
}
else
{
return false;
}
}
public:
virtual int GetHashCode(Object^ obj)
{
// Compare the hash code for the lowercase versions of the strings.
return obj->ToString()->ToLower()->GetHashCode();
}
};
public ref class SamplesHashtable
{
public:
static void Main()
{
// Create a hash table using the default comparer.
Hashtable^ myHT1 = gcnew 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 = gcnew Hashtable(3, .8f, gcnew 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 = gcnew CultureInfo("tr-TR");
Hashtable^ myHT3 = gcnew Hashtable(3, .8f, gcnew 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"));
}
};
int main()
{
SamplesHashtable::Main();
}
/*
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
*/
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 depósitos. 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 depósitos aumenta automáticamente al número primo más pequeño que es mayor que el doble del 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 debe ser única. El comparador predeterminado es la implementación de la clave de Object.Equals.
IEqualityComparer Habilita 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)
- Source:
- Hashtable.cs
- Source:
- Hashtable.cs
- Source:
- Hashtable.cs
Precaución
Please use Hashtable(int, IEqualityComparer) instead.
Precaución
This constructor has been deprecated. Use Hashtable(int, IEqualityComparer) instead.
Inicializa una nueva instancia vacía de la clase Hashtable utilizando la capacidad inicial, el proveedor de código hash y el comparador especificados, y el factor de carga predeterminado.
public:
Hashtable(int capacity, System::Collections::IHashCodeProvider ^ hcp, System::Collections::IComparer ^ comparer);
[System.Obsolete("Please use Hashtable(int, IEqualityComparer) instead.")]
public Hashtable (int capacity, System.Collections.IHashCodeProvider? hcp, System.Collections.IComparer? comparer);
[System.Obsolete("This constructor has been deprecated. Use Hashtable(int, IEqualityComparer) instead.")]
public Hashtable (int capacity, System.Collections.IHashCodeProvider? hcp, System.Collections.IComparer? comparer);
[System.Obsolete("Please use Hashtable(int, IEqualityComparer) instead.")]
public Hashtable (int capacity, System.Collections.IHashCodeProvider hcp, System.Collections.IComparer comparer);
public Hashtable (int capacity, System.Collections.IHashCodeProvider hcp, System.Collections.IComparer comparer);
[<System.Obsolete("Please use Hashtable(int, IEqualityComparer) instead.")>]
new System.Collections.Hashtable : int * System.Collections.IHashCodeProvider * System.Collections.IComparer -> System.Collections.Hashtable
[<System.Obsolete("This constructor has been deprecated. Use Hashtable(int, IEqualityComparer) instead.")>]
new System.Collections.Hashtable : int * System.Collections.IHashCodeProvider * System.Collections.IComparer -> System.Collections.Hashtable
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
Objeto IHashCodeProvider que suministra los códigos hash de todas las claves de Hashtable.
o bien
null
para utilizar el proveedor predeterminado de código hash, que es la implementación de GetHashCode() de cada clave.
- comparer
- IComparer
Objeto IComparer que se va a utilizar para determinar si dos claves son iguales.
o bien
null
para utilizar el comparador predeterminado, que es la implementación de cada clave de Equals(Object).
- Atributos
Excepciones
capacity
es menor que cero.
Ejemplos
En el ejemplo de código siguiente se crean tablas hash con distintos Hashtable constructores y se muestran las diferencias en el comportamiento de las tablas hash, incluso si cada una contiene los mismos elementos.
using namespace System;
using namespace System::Collections;
using namespace System::Globalization;
ref class myCultureComparer : public IEqualityComparer
{
public:
CaseInsensitiveComparer^ myComparer;
public:
myCultureComparer()
{
myComparer = CaseInsensitiveComparer::DefaultInvariant;
}
public:
myCultureComparer(CultureInfo^ myCulture)
{
myComparer = gcnew CaseInsensitiveComparer(myCulture);
}
public:
virtual bool Equals(Object^ x, Object^ y)
{
if (myComparer->Compare(x, y) == 0)
{
return true;
}
else
{
return false;
}
}
public:
virtual int GetHashCode(Object^ obj)
{
// Compare the hash code for the lowercase versions of the strings.
return obj->ToString()->ToLower()->GetHashCode();
}
};
public ref class SamplesHashtable
{
public:
static void Main()
{
// Create a hash table using the default comparer.
Hashtable^ myHT1 = gcnew 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 = gcnew Hashtable(3, gcnew 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 = gcnew CultureInfo("tr-TR");
Hashtable^ myHT3 = gcnew Hashtable(3, gcnew 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"));
}
};
int main()
{
SamplesHashtable::Main();
}
/*
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
*/
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 depósitos. 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 depósitos aumenta automáticamente al número primo más pequeño que es mayor que el doble del 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 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)
- Source:
- Hashtable.cs
- Source:
- Hashtable.cs
- Source:
- Hashtable.cs
Inicializa una nueva instancia de la clase Hashtable copiando los elementos del diccionario especificado en el nuevo objeto Hashtable. El nuevo objeto Hashtable tiene una capacidad inicial igual al número de elementos copiados, y utiliza el factor de carga y el objeto IEqualityComparer 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);
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
Objeto IDictionary que debe copiarse a un nuevo objeto Hashtable.
- loadFactor
- Single
Número incluido en el intervalo de 0,1 a 1,0 que se multiplica por el valor predeterminado que proporciona el mejor rendimiento. El resultado es la relación máxima de elementos por sectores de almacenamiento.
- equalityComparer
- IEqualityComparer
Objeto IEqualityComparer que define el proveedor de código hash y el comparador que se van a usar con Hashtable.
o bien
null
para utilizar el proveedor de código hash y el comparador predeterminados. El proveedor de código hash predeterminado es la implementación del GetHashCode() de cada clave y el comparador predeterminado es la implementación del Equals(Object) de cada clave.
Excepciones
d
es null
.
Ejemplos
En el ejemplo de código siguiente se crean tablas hash con distintos Hashtable constructores y se muestran las diferencias en el comportamiento de las tablas hash, incluso si cada una contiene los mismos elementos.
using namespace System;
using namespace System::Collections;
using namespace System::Globalization;
ref class myCultureComparer : public IEqualityComparer
{
public:
CaseInsensitiveComparer^ myComparer;
public:
myCultureComparer()
{
myComparer = CaseInsensitiveComparer::DefaultInvariant;
}
public:
myCultureComparer(CultureInfo^ myCulture)
{
myComparer = gcnew CaseInsensitiveComparer(myCulture);
}
public:
virtual bool Equals(Object^ x, Object^ y)
{
if (myComparer->Compare(x, y) == 0)
{
return true;
}
else
{
return false;
}
}
public:
virtual int GetHashCode(Object^ obj)
{
// Compare the hash code for the lowercase versions of the strings.
return obj->ToString()->ToLower()->GetHashCode();
}
};
public ref class SamplesHashtable
{
public:
static void Main()
{
// Create the dictionary.
SortedList^ mySL = gcnew SortedList;
mySL->Add( "FIRST", "Hello" );
mySL->Add( "SECOND", "World" );
mySL->Add( "THIRD", "!" );
// Create a hash table using the default hash code provider and the default comparer.
Hashtable^ myHT1 = gcnew Hashtable( mySL, .8f );
// Create a hash table using the specified case-insensitive hash code provider and case-insensitive comparer.
Hashtable^ myHT2 = gcnew Hashtable( mySL, .8f, gcnew myCultureComparer() );
// Create a hash table using the specified KeyComparer.
// The KeyComparer uses a case-insensitive hash code provider and a case-insensitive comparer,
// which are based on the Turkish culture (tr-TR), where "I" is not the uppercase version of "i".
CultureInfo^ myCul = gcnew CultureInfo( "tr-TR" );
Hashtable^ myHT3 = gcnew Hashtable( mySL, .8f, gcnew 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" ) );
}
};
int main()
{
SamplesHashtable::Main();
}
/*
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
*/
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 depósitos. 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 depósitos aumenta automáticamente al número primo más pequeño que es mayor que el doble del 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 debe ser única. El comparador predeterminado es la implementación de la clave de Object.Equals.
IEqualityComparer Habilita 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)
- Source:
- Hashtable.cs
- Source:
- Hashtable.cs
- Source:
- Hashtable.cs
Precaución
Please use Hashtable(IDictionary, IEqualityComparer) instead.
Precaución
This constructor has been deprecated. Use Hashtable(IDictionary, IEqualityComparer) instead.
Inicializa una nueva instancia de la clase Hashtable copiando los elementos del diccionario especificado en el nuevo objeto Hashtable. El nuevo objeto Hashtable tiene una capacidad inicial igual al número de elementos copiados, utiliza el factor de carga predeterminado, y el proveedor de código hash y comparador especificados. Esta API está obsoleta. Para una alternativa, vea Hashtable(IDictionary, IEqualityComparer).
public:
Hashtable(System::Collections::IDictionary ^ d, System::Collections::IHashCodeProvider ^ hcp, System::Collections::IComparer ^ comparer);
[System.Obsolete("Please use Hashtable(IDictionary, IEqualityComparer) instead.")]
public Hashtable (System.Collections.IDictionary d, System.Collections.IHashCodeProvider? hcp, System.Collections.IComparer? comparer);
[System.Obsolete("This constructor has been deprecated. Use Hashtable(IDictionary, IEqualityComparer) instead.")]
public Hashtable (System.Collections.IDictionary d, System.Collections.IHashCodeProvider? hcp, System.Collections.IComparer? comparer);
[System.Obsolete("Please use Hashtable(IDictionary, IEqualityComparer) instead.")]
public Hashtable (System.Collections.IDictionary d, System.Collections.IHashCodeProvider hcp, System.Collections.IComparer comparer);
public Hashtable (System.Collections.IDictionary d, System.Collections.IHashCodeProvider hcp, System.Collections.IComparer comparer);
[<System.Obsolete("Please use Hashtable(IDictionary, IEqualityComparer) instead.")>]
new System.Collections.Hashtable : System.Collections.IDictionary * System.Collections.IHashCodeProvider * System.Collections.IComparer -> System.Collections.Hashtable
[<System.Obsolete("This constructor has been deprecated. Use Hashtable(IDictionary, IEqualityComparer) instead.")>]
new System.Collections.Hashtable : System.Collections.IDictionary * System.Collections.IHashCodeProvider * System.Collections.IComparer -> System.Collections.Hashtable
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
Objeto IDictionary que debe copiarse a un nuevo objeto Hashtable.
Objeto IHashCodeProvider que suministra los códigos hash de todas las claves de Hashtable.
o bien
null
para utilizar el proveedor predeterminado de código hash, que es la implementación de GetHashCode() de cada clave.
- comparer
- IComparer
Objeto IComparer que se va a utilizar para determinar si dos claves son iguales.
o bien
null
para utilizar el comparador predeterminado, que es la implementación de cada clave de Equals(Object).
- Atributos
Excepciones
d
es null
.
Ejemplos
En el ejemplo de código siguiente se crean tablas hash con distintos Hashtable constructores y se muestran las diferencias en el comportamiento de las tablas hash, incluso si cada una contiene los mismos elementos.
using namespace System;
using namespace System::Collections;
using namespace System::Globalization;
ref class myCultureComparer : public IEqualityComparer
{
public:
CaseInsensitiveComparer^ myComparer;
public:
myCultureComparer()
{
myComparer = CaseInsensitiveComparer::DefaultInvariant;
}
public:
myCultureComparer(CultureInfo^ myCulture)
{
myComparer = gcnew CaseInsensitiveComparer(myCulture);
}
public:
virtual bool Equals(Object^ x, Object^ y)
{
if (myComparer->Compare(x, y) == 0)
{
return true;
}
else
{
return false;
}
}
public:
virtual int GetHashCode(Object^ obj)
{
// Compare the hash code for the lowercase versions of the strings.
return obj->ToString()->ToLower()->GetHashCode();
}
};
public ref class SamplesHashtable
{
public:
static void Main()
{
// Create the dictionary.
SortedList^ mySL = gcnew SortedList();
mySL->Add("FIRST", "Hello");
mySL->Add("SECOND", "World");
mySL->Add("THIRD", "!");
// Create a hash table using the default comparer.
Hashtable^ myHT1 = gcnew Hashtable(mySL);
// Create a hash table using the specified IEqualityComparer that uses
// the CaseInsensitiveComparer.DefaultInvariant to determine equality.
Hashtable^ myHT2 = gcnew Hashtable(mySL, gcnew 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 = gcnew CultureInfo("tr-TR");
Hashtable^ myHT3 = gcnew Hashtable(mySL, gcnew 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"));
}
};
int main()
{
SamplesHashtable::Main();
};
/*
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
*/
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 depósitos. 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 depósitos aumenta automáticamente al número primo más pequeño que es mayor que el doble del 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 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)
- Source:
- Hashtable.cs
- Source:
- Hashtable.cs
- Source:
- Hashtable.cs
Inicializa una nueva instancia vacía de la clase Hashtable utilizando la capacidad inicial y el factor de carga especificados, y el proveedor de código hash y el comparador 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
- loadFactor
- Single
Número incluido en el intervalo de 0,1 a 1,0 que se multiplica por el valor predeterminado que proporciona el mejor rendimiento. El resultado es la relación máxima de elementos por sectores de almacenamiento.
Excepciones
capacity
es menor que cero.
o bien
loadFactor
es menor que 0,1.
o bien
loadFactor
es mayor que 1,0.
capacity
está produciendo un desbordamiento.
Ejemplos
En el ejemplo de código siguiente se crean tablas hash con distintos Hashtable constructores y se muestran las diferencias en el comportamiento de las tablas hash, incluso si cada una contiene los mismos elementos.
using namespace System;
using namespace System::Collections;
using namespace System::Globalization;
ref class myCultureComparer : public IEqualityComparer
{
public:
CaseInsensitiveComparer^ myComparer;
public:
myCultureComparer()
{
myComparer = CaseInsensitiveComparer::DefaultInvariant;
}
public:
myCultureComparer(CultureInfo^ myCulture)
{
myComparer = gcnew CaseInsensitiveComparer(myCulture);
}
public:
virtual bool Equals(Object^ x, Object^ y)
{
if (myComparer->Compare(x, y) == 0)
{
return true;
}
else
{
return false;
}
}
public:
virtual int GetHashCode(Object^ obj)
{
// Compare the hash code for the lowercase versions of the strings.
return obj->ToString()->ToLower()->GetHashCode();
}
};
public ref class SamplesHashtable
{
public:
static void Main()
{
// Create a hash table using the default comparer.
Hashtable^ myHT1 = gcnew 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 = gcnew Hashtable(3, .8f, gcnew 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 = gcnew CultureInfo("tr-TR");
Hashtable^ myHT3 = gcnew Hashtable(3, .8f, gcnew 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"));
}
};
int main()
{
SamplesHashtable::Main();
}
/*
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
*/
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 depósitos. 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 depósitos aumenta automáticamente al número primo más pequeño que es mayor que el doble del 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 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)
- Source:
- Hashtable.cs
- Source:
- Hashtable.cs
- Source:
- Hashtable.cs
Precaución
This API supports obsolete formatter-based serialization. It should not be called or extended by application code.
Inicializa una nueva instancia vacía de la clase Hashtable que es serializable, utilizando los objetos SerializationInfo y StreamingContext especificados.
protected:
Hashtable(System::Runtime::Serialization::SerializationInfo ^ info, System::Runtime::Serialization::StreamingContext context);
protected Hashtable (System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context);
[System.Obsolete("This API supports obsolete formatter-based serialization. It should not be called or extended by application code.", DiagnosticId="SYSLIB0051", UrlFormat="https://aka.ms/dotnet-warnings/{0}")]
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
[<System.Obsolete("This API supports obsolete formatter-based serialization. It should not be called or extended by application code.", DiagnosticId="SYSLIB0051", UrlFormat="https://aka.ms/dotnet-warnings/{0}")>]
new System.Collections.Hashtable : System.Runtime.Serialization.SerializationInfo * System.Runtime.Serialization.StreamingContext -> System.Collections.Hashtable
Protected Sub New (info As SerializationInfo, context As StreamingContext)
Parámetros
- info
- SerializationInfo
Objeto SerializationInfo que contiene la información que se requiere para serializar el objeto Hashtable.
- context
- StreamingContext
Objeto StreamingContext que contiene el origen y el destino de la secuencia serializada asociada al Hashtable.
- Atributos
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 depósitos. 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 depósitos aumenta automáticamente al número primo más pequeño que es mayor que el doble del 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 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 la serialización y deserialización de 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
- ISerializable
- SerializationInfo
- StreamingContext
- OnDeserialization(Object)
- GetHashCode()
- Equals(Object)
Se aplica a
Hashtable(IHashCodeProvider, IComparer)
- Source:
- Hashtable.cs
- Source:
- Hashtable.cs
- Source:
- Hashtable.cs
Precaución
Please use Hashtable(IEqualityComparer) instead.
Precaución
This constructor has been deprecated. Use Hashtable(IEqualityComparer).
Precaución
This constructor has been deprecated. Use Hashtable(IEqualityComparer) instead.
Inicializa una nueva instancia vacía de la clase Hashtable utilizando la capacidad inicial y el factor de carga predeterminados, y el proveedor de código hash y el comparador especificados.
public:
Hashtable(System::Collections::IHashCodeProvider ^ hcp, System::Collections::IComparer ^ comparer);
[System.Obsolete("Please use Hashtable(IEqualityComparer) instead.")]
public Hashtable (System.Collections.IHashCodeProvider? hcp, System.Collections.IComparer? comparer);
[System.Obsolete("This constructor has been deprecated. Use Hashtable(IEqualityComparer).")]
public Hashtable (System.Collections.IHashCodeProvider? hcp, System.Collections.IComparer? comparer);
[System.Obsolete("This constructor has been deprecated. Use Hashtable(IEqualityComparer) instead.")]
public Hashtable (System.Collections.IHashCodeProvider? hcp, System.Collections.IComparer? comparer);
[System.Obsolete("Please use Hashtable(IEqualityComparer) instead.")]
public Hashtable (System.Collections.IHashCodeProvider hcp, System.Collections.IComparer comparer);
public Hashtable (System.Collections.IHashCodeProvider hcp, System.Collections.IComparer comparer);
[<System.Obsolete("Please use Hashtable(IEqualityComparer) instead.")>]
new System.Collections.Hashtable : System.Collections.IHashCodeProvider * System.Collections.IComparer -> System.Collections.Hashtable
[<System.Obsolete("This constructor has been deprecated. Use Hashtable(IEqualityComparer).")>]
new System.Collections.Hashtable : System.Collections.IHashCodeProvider * System.Collections.IComparer -> System.Collections.Hashtable
[<System.Obsolete("This constructor has been deprecated. Use Hashtable(IEqualityComparer) instead.")>]
new System.Collections.Hashtable : System.Collections.IHashCodeProvider * System.Collections.IComparer -> System.Collections.Hashtable
new System.Collections.Hashtable : System.Collections.IHashCodeProvider * System.Collections.IComparer -> System.Collections.Hashtable
Public Sub New (hcp As IHashCodeProvider, comparer As IComparer)
Parámetros
Objeto IHashCodeProvider que suministra los códigos hash de todas las claves del objeto Hashtable.
o bien
null
para utilizar el proveedor predeterminado de código hash, que es la implementación de GetHashCode() de cada clave.
- comparer
- IComparer
Objeto IComparer que se va a utilizar para determinar si dos claves son iguales.
o bien
null
para utilizar el comparador predeterminado, que es la implementación de cada clave de Equals(Object).
- Atributos
Ejemplos
En el ejemplo de código siguiente se crean tablas hash con distintos Hashtable constructores y se muestran las diferencias en el comportamiento de las tablas hash, incluso si cada una contiene los mismos elementos.
using namespace System;
using namespace System::Collections;
using namespace System::Globalization;
ref class myComparer : IEqualityComparer
{
public:
virtual bool Equals(Object^ x, Object^ y)
{
return x->Equals(y);
}
virtual int GetHashCode(Object^ obj)
{
return obj->ToString()->ToLower()->GetHashCode();
}
};
ref class myCultureComparer : IEqualityComparer
{
private:
CaseInsensitiveComparer^ myComparer;
public:
myCultureComparer()
{
myComparer = CaseInsensitiveComparer::DefaultInvariant;
}
myCultureComparer(CultureInfo^ myCulture)
{
myComparer = gcnew CaseInsensitiveComparer(myCulture);
}
virtual bool Equals(Object^ x, Object^ y)
{
if (myComparer->Compare(x, y) == 0)
{
return true;
}
else
{
return false;
}
}
virtual int GetHashCode(Object^ obj)
{
return obj->ToString()->ToLower()->GetHashCode();
}
};
int main()
{
// Create a hash table using the default hash code provider and the default comparer.
Hashtable^ myHT1 = gcnew Hashtable((IEqualityComparer^)nullptr);
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.
Hashtable^ myHT2 = gcnew Hashtable(gcnew 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 = gcnew 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".
CultureInfo^ myCul = gcnew CultureInfo("tr-TR");
Hashtable^ myHT4 = gcnew Hashtable( gcnew 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: {0}", myHT1->ContainsKey( "first" ) );
Console::WriteLine( "first is in myHT2: {0}", myHT2->ContainsKey( "first" ) );
Console::WriteLine( "first is in myHT3: {0}", myHT3->ContainsKey( "first" ) );
Console::WriteLine( "first is in myHT4: {0}", 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
*/
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 depósitos. 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 depósitos aumenta automáticamente al número primo más pequeño que es mayor que el doble del 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 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)
- Source:
- Hashtable.cs
- Source:
- Hashtable.cs
- Source:
- Hashtable.cs
Inicializa una nueva instancia de la clase Hashtable copiando los elementos del diccionario especificado en el nuevo objeto Hashtable. El nuevo objeto Hashtable tiene una capacidad inicial igual al número de elementos copiados, utiliza el factor de carga especificado, y el proveedor de código hash y comparador predeterminados.
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
Objeto IDictionary que debe copiarse a un nuevo objeto Hashtable.
- loadFactor
- Single
Número incluido en el intervalo de 0,1 a 1,0 que se multiplica por el valor predeterminado que proporciona el mejor rendimiento. El resultado es la relación máxima de elementos por sectores de almacenamiento.
Excepciones
d
es null
.
Ejemplos
En el ejemplo de código siguiente se crean tablas hash con distintos Hashtable constructores y se muestran las diferencias en el comportamiento de las tablas hash, incluso si cada una contiene los mismos elementos.
using namespace System;
using namespace System::Collections;
using namespace System::Globalization;
ref class myCultureComparer : public IEqualityComparer
{
public:
CaseInsensitiveComparer^ myComparer;
public:
myCultureComparer()
{
myComparer = CaseInsensitiveComparer::DefaultInvariant;
}
public:
myCultureComparer(CultureInfo^ myCulture)
{
myComparer = gcnew CaseInsensitiveComparer(myCulture);
}
public:
virtual bool Equals(Object^ x, Object^ y)
{
if (myComparer->Compare(x, y) == 0)
{
return true;
}
else
{
return false;
}
}
public:
virtual int GetHashCode(Object^ obj)
{
// Compare the hash code for the lowercase versions of the strings.
return obj->ToString()->ToLower()->GetHashCode();
}
};
public ref class SamplesHashtable
{
public:
static void Main()
{
// Create the dictionary.
SortedList^ mySL = gcnew SortedList;
mySL->Add( "FIRST", "Hello" );
mySL->Add( "SECOND", "World" );
mySL->Add( "THIRD", "!" );
// Create a hash table using the default hash code provider and the default comparer.
Hashtable^ myHT1 = gcnew Hashtable( mySL, .8f );
// Create a hash table using the specified case-insensitive hash code provider and case-insensitive comparer.
Hashtable^ myHT2 = gcnew Hashtable( mySL, .8f, gcnew myCultureComparer() );
// Create a hash table using the specified KeyComparer.
// The KeyComparer uses a case-insensitive hash code provider and a case-insensitive comparer,
// which are based on the Turkish culture (tr-TR), where "I" is not the uppercase version of "i".
CultureInfo^ myCul = gcnew CultureInfo( "tr-TR" );
Hashtable^ myHT3 = gcnew Hashtable( mySL, .8f, gcnew 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" ) );
}
};
int main()
{
SamplesHashtable::Main();
}
/*
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
*/
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 se incrementa 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 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)
- Source:
- Hashtable.cs
- Source:
- Hashtable.cs
- Source:
- Hashtable.cs
Inicializa una nueva instancia de la clase Hashtable copiando los elementos del diccionario especificado en un nuevo objeto Hashtable. El nuevo objeto Hashtable tiene una capacidad inicial igual al número de elementos copiados, y utiliza el factor de carga predeterminado y el objeto IEqualityComparer especificado.
public:
Hashtable(System::Collections::IDictionary ^ d, System::Collections::IEqualityComparer ^ equalityComparer);
public Hashtable (System.Collections.IDictionary d, System.Collections.IEqualityComparer equalityComparer);
public Hashtable (System.Collections.IDictionary d, System.Collections.IEqualityComparer? equalityComparer);
new System.Collections.Hashtable : System.Collections.IDictionary * System.Collections.IEqualityComparer -> System.Collections.Hashtable
Public Sub New (d As IDictionary, equalityComparer As IEqualityComparer)
Parámetros
Objeto IDictionary que debe copiarse a un nuevo objeto Hashtable.
- equalityComparer
- IEqualityComparer
Objeto IEqualityComparer que define el proveedor de código hash y el comparador que se van a usar con Hashtable.
o bien
null
para utilizar el proveedor de código hash y el comparador predeterminados. El proveedor de código hash predeterminado es la implementación del GetHashCode() de cada clave y el comparador predeterminado es la implementación del Equals(Object) de cada clave.
Excepciones
d
es null
.
Ejemplos
En el ejemplo de código siguiente se crean tablas hash con distintos Hashtable constructores y se muestran las diferencias en el comportamiento de las tablas hash, incluso si cada una contiene los mismos elementos.
using namespace System;
using namespace System::Collections;
using namespace System::Globalization;
ref class myCultureComparer : public IEqualityComparer
{
public:
CaseInsensitiveComparer^ myComparer;
public:
myCultureComparer()
{
myComparer = CaseInsensitiveComparer::DefaultInvariant;
}
public:
myCultureComparer(CultureInfo^ myCulture)
{
myComparer = gcnew CaseInsensitiveComparer(myCulture);
}
public:
virtual bool Equals(Object^ x, Object^ y)
{
if (myComparer->Compare(x, y) == 0)
{
return true;
}
else
{
return false;
}
}
public:
virtual int GetHashCode(Object^ obj)
{
// Compare the hash code for the lowercase versions of the strings.
return obj->ToString()->ToLower()->GetHashCode();
}
};
public ref class SamplesHashtable
{
public:
static void Main()
{
// Create the dictionary.
SortedList^ mySL = gcnew SortedList();
mySL->Add("FIRST", "Hello");
mySL->Add("SECOND", "World");
mySL->Add("THIRD", "!");
// Create a hash table using the default comparer.
Hashtable^ myHT1 = gcnew Hashtable(mySL);
// Create a hash table using the specified IEqualityComparer that uses
// the CaseInsensitiveComparer.DefaultInvariant to determine equality.
Hashtable^ myHT2 = gcnew Hashtable(mySL, gcnew 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 = gcnew CultureInfo("tr-TR");
Hashtable^ myHT3 = gcnew Hashtable(mySL, gcnew 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"));
}
};
int main()
{
SamplesHashtable::Main();
};
/*
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
*/
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 se incrementa 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 debe ser única. El comparador predeterminado es la implementación de la clave de Object.Equals.
IEqualityComparer Permite 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)
- Source:
- Hashtable.cs
- Source:
- Hashtable.cs
- Source:
- Hashtable.cs
Inicializa una nueva instancia vacía de la clase Hashtable utilizando la capacidad inicial especificada, y el factor de carga, el proveedor de código hash y el comparador predeterminados.
public:
Hashtable(int capacity);
public Hashtable (int capacity);
new System.Collections.Hashtable : int -> System.Collections.Hashtable
Public Sub New (capacity As Integer)
Parámetros
Excepciones
capacity
es menor que cero.
Ejemplos
En el ejemplo de código siguiente se crean tablas hash con distintos Hashtable constructores y se muestran las diferencias en el comportamiento de las tablas hash, incluso si cada una contiene los mismos elementos.
using namespace System;
using namespace System::Collections;
using namespace System::Globalization;
ref class myCultureComparer : public IEqualityComparer
{
public:
CaseInsensitiveComparer^ myComparer;
public:
myCultureComparer()
{
myComparer = CaseInsensitiveComparer::DefaultInvariant;
}
public:
myCultureComparer(CultureInfo^ myCulture)
{
myComparer = gcnew CaseInsensitiveComparer(myCulture);
}
public:
virtual bool Equals(Object^ x, Object^ y)
{
if (myComparer->Compare(x, y) == 0)
{
return true;
}
else
{
return false;
}
}
public:
virtual int GetHashCode(Object^ obj)
{
// Compare the hash code for the lowercase versions of the strings.
return obj->ToString()->ToLower()->GetHashCode();
}
};
public ref class SamplesHashtable
{
public:
static void Main()
{
// Create a hash table using the default comparer.
Hashtable^ myHT1 = gcnew 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 = gcnew Hashtable(3, gcnew 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 = gcnew CultureInfo("tr-TR");
Hashtable^ myHT3 = gcnew Hashtable(3, gcnew 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"));
}
};
int main()
{
SamplesHashtable::Main();
}
/*
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
*/
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
Especificar 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 se incrementa 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 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)
- Source:
- Hashtable.cs
- Source:
- Hashtable.cs
- Source:
- Hashtable.cs
Inicializa una nueva instancia vacía de la clase Hashtable utilizando la capacidad inicial y el factor de carga predeterminados, y el objeto IEqualityComparer especificado.
public:
Hashtable(System::Collections::IEqualityComparer ^ equalityComparer);
public Hashtable (System.Collections.IEqualityComparer equalityComparer);
public Hashtable (System.Collections.IEqualityComparer? equalityComparer);
new System.Collections.Hashtable : System.Collections.IEqualityComparer -> System.Collections.Hashtable
Public Sub New (equalityComparer As IEqualityComparer)
Parámetros
- equalityComparer
- IEqualityComparer
Objeto IEqualityComparer que define el proveedor de código hash y el comparador que se van a utilizar con el objeto Hashtable.
o bien
null
para utilizar el proveedor de código hash y el comparador predeterminados. El proveedor de código hash predeterminado es la implementación del GetHashCode() de cada clave y el comparador predeterminado es la implementación del Equals(Object) de cada clave.
Ejemplos
En el ejemplo de código siguiente se crean tablas hash con distintos Hashtable constructores y se muestran las diferencias en el comportamiento de las tablas hash, incluso si cada una contiene los mismos elementos.
using namespace System;
using namespace System::Collections;
using namespace System::Globalization;
ref class myComparer : IEqualityComparer
{
public:
virtual bool Equals(Object^ x, Object^ y)
{
return x->Equals(y);
}
virtual int GetHashCode(Object^ obj)
{
return obj->ToString()->ToLower()->GetHashCode();
}
};
ref class myCultureComparer : IEqualityComparer
{
private:
CaseInsensitiveComparer^ myComparer;
public:
myCultureComparer()
{
myComparer = CaseInsensitiveComparer::DefaultInvariant;
}
myCultureComparer(CultureInfo^ myCulture)
{
myComparer = gcnew CaseInsensitiveComparer(myCulture);
}
virtual bool Equals(Object^ x, Object^ y)
{
if (myComparer->Compare(x, y) == 0)
{
return true;
}
else
{
return false;
}
}
virtual int GetHashCode(Object^ obj)
{
return obj->ToString()->ToLower()->GetHashCode();
}
};
int main()
{
// Create a hash table using the default hash code provider and the default comparer.
Hashtable^ myHT1 = gcnew Hashtable((IEqualityComparer^)nullptr);
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.
Hashtable^ myHT2 = gcnew Hashtable(gcnew 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 = gcnew 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".
CultureInfo^ myCul = gcnew CultureInfo("tr-TR");
Hashtable^ myHT4 = gcnew Hashtable( gcnew 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: {0}", myHT1->ContainsKey( "first" ) );
Console::WriteLine( "first is in myHT2: {0}", myHT2->ContainsKey( "first" ) );
Console::WriteLine( "first is in myHT3: {0}", myHT3->ContainsKey( "first" ) );
Console::WriteLine( "first is in myHT4: {0}", 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
*/
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 se incrementa 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 debe ser única. El comparador predeterminado es la implementación de la clave de Object.Equals.
IEqualityComparer Permite 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)
- Source:
- Hashtable.cs
- Source:
- Hashtable.cs
- Source:
- Hashtable.cs
Inicializa una nueva instancia de la clase Hashtable copiando los elementos del diccionario especificado en el nuevo objeto Hashtable. El nuevo objeto Hashtable tiene una capacidad inicial igual al número de elementos copiados, y utiliza el factor de carga, el proveedor de código hash y comparador predeterminados.
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
Objeto IDictionary que debe copiarse a un nuevo objeto Hashtable.
Excepciones
d
es null
.
Ejemplos
En el ejemplo de código siguiente se crean tablas hash con distintos Hashtable constructores y se muestran las diferencias en el comportamiento de las tablas hash, incluso si cada una contiene los mismos elementos.
using namespace System;
using namespace System::Collections;
using namespace System::Globalization;
ref class myCultureComparer : public IEqualityComparer
{
public:
CaseInsensitiveComparer^ myComparer;
public:
myCultureComparer()
{
myComparer = CaseInsensitiveComparer::DefaultInvariant;
}
public:
myCultureComparer(CultureInfo^ myCulture)
{
myComparer = gcnew CaseInsensitiveComparer(myCulture);
}
public:
virtual bool Equals(Object^ x, Object^ y)
{
if (myComparer->Compare(x, y) == 0)
{
return true;
}
else
{
return false;
}
}
public:
virtual int GetHashCode(Object^ obj)
{
// Compare the hash code for the lowercase versions of the strings.
return obj->ToString()->ToLower()->GetHashCode();
}
};
public ref class SamplesHashtable
{
public:
static void Main()
{
// Create the dictionary.
SortedList^ mySL = gcnew SortedList();
mySL->Add("FIRST", "Hello");
mySL->Add("SECOND", "World");
mySL->Add("THIRD", "!");
// Create a hash table using the default comparer.
Hashtable^ myHT1 = gcnew Hashtable(mySL);
// Create a hash table using the specified IEqualityComparer that uses
// the CaseInsensitiveComparer.DefaultInvariant to determine equality.
Hashtable^ myHT2 = gcnew Hashtable(mySL, gcnew 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 = gcnew CultureInfo("tr-TR");
Hashtable^ myHT3 = gcnew Hashtable(mySL, gcnew 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"));
}
};
int main()
{
SamplesHashtable::Main();
};
/*
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
*/
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 se incrementa 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 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)
- Source:
- Hashtable.cs
- Source:
- Hashtable.cs
- Source:
- Hashtable.cs
Inicializa una nueva instancia vacía de la clase Hashtable utilizando la capacidad inicial y el objeto IEqualityComparer especificados, y el factor de carga predeterminado.
public:
Hashtable(int capacity, System::Collections::IEqualityComparer ^ equalityComparer);
public Hashtable (int capacity, System.Collections.IEqualityComparer equalityComparer);
public Hashtable (int capacity, System.Collections.IEqualityComparer? equalityComparer);
new System.Collections.Hashtable : int * System.Collections.IEqualityComparer -> System.Collections.Hashtable
Public Sub New (capacity As Integer, equalityComparer As IEqualityComparer)
Parámetros
- equalityComparer
- IEqualityComparer
Objeto IEqualityComparer que define el proveedor de código hash y el comparador que se van a usar con Hashtable.
o bien
null
para utilizar el proveedor de código hash y el comparador predeterminados. El proveedor de código hash predeterminado es la implementación del GetHashCode() de cada clave y el comparador predeterminado es la implementación del Equals(Object) de cada clave.
Excepciones
capacity
es menor que cero.
Ejemplos
En el ejemplo de código siguiente se crean tablas hash con distintos Hashtable constructores y se muestran las diferencias en el comportamiento de las tablas hash, incluso si cada una contiene los mismos elementos.
using namespace System;
using namespace System::Collections;
using namespace System::Globalization;
ref class myCultureComparer : public IEqualityComparer
{
public:
CaseInsensitiveComparer^ myComparer;
public:
myCultureComparer()
{
myComparer = CaseInsensitiveComparer::DefaultInvariant;
}
public:
myCultureComparer(CultureInfo^ myCulture)
{
myComparer = gcnew CaseInsensitiveComparer(myCulture);
}
public:
virtual bool Equals(Object^ x, Object^ y)
{
if (myComparer->Compare(x, y) == 0)
{
return true;
}
else
{
return false;
}
}
public:
virtual int GetHashCode(Object^ obj)
{
// Compare the hash code for the lowercase versions of the strings.
return obj->ToString()->ToLower()->GetHashCode();
}
};
public ref class SamplesHashtable
{
public:
static void Main()
{
// Create a hash table using the default comparer.
Hashtable^ myHT1 = gcnew 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 = gcnew Hashtable(3, gcnew 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 = gcnew CultureInfo("tr-TR");
Hashtable^ myHT3 = gcnew Hashtable(3, gcnew 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"));
}
};
int main()
{
SamplesHashtable::Main();
}
/*
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
*/
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
Especificar 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 se incrementa 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 de no Hashtable 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 debe ser única. El comparador predeterminado es la implementación de la clave de Object.Equals.
IEqualityComparer Permite 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 .