Hashtable, constructeur (IEqualityComparer)

Hashtable, constructeur (IEqualityComparer)

Remarque : ce constructeur est nouveau dans le .NET Framework version 2.0.

Initialise une nouvelle instance vide de la classe Hashtable à l'aide de la capacité initiale et du facteur de charge par défaut, et de l'objet IEqualityComparer spécifié.

Espace de noms : System.Collections
Assembly : mscorlib (dans mscorlib.dll)

public Hashtable (
	IEqualityComparer equalityComparer
)
public Hashtable (
	IEqualityComparer equalityComparer
)
public function Hashtable (
	equalityComparer : IEqualityComparer
)

Paramètres

equalityComparer

Objet IEqualityComparer qui définit le fournisseur de code de hachage et le comparateur à utiliser avec l'objet Hashtable.

- ou -

référence Null (Nothing en Visual Basic) pour utiliser le fournisseur de code de hachage par défaut et le comparateur par défaut. Le fournisseur de code de hachage par défaut est l'implémentation de Object.GetHashCode de chaque clé et le comparateur par défaut est l'implémentation de Object.Equals de chaque clé.

La capacité d'une table de hachage est utilisée pour calculer le nombre optimal de compartiments de table de hachage en fonction du facteur de charge. La capacité est augmentée selon les besoins.

Le facteur de charge est le ratio maximal d'éléments par compartiment. Un facteur de charge plus faible écourte les temps moyens de recherche, mais augmente la consommation de mémoire.

Lorsque le facteur de charge réel devient égal au facteur de charge spécifié, le nombre de compartiments est automatiquement augmenté au plus petit nombre premier supérieur à deux fois le nombre actuel de compartiments.

L'objet IEqualityComparer comprend à la fois le fournisseur de code de hachage et le comparateur. Si IEqualityComparer est utilisé dans le constructeur Hashtable, les objets utilisés en tant que clés dans Hashtable ne sont pas obligatoires pour substituer les méthodes Object.GetHashCode et Object.Equals.

Le fournisseur de code de hachage fournit les codes de hachage des clés dans Hashtable. Le fournisseur de code de hachage par défaut est l'implémentation de clé de Object.GetHashCode.

Le comparateur détermine si deux clés sont égales. Chaque clé contenue dans Hashtable doit être unique. Le comparateur par défaut est l'implémentation de clé de Object.Equals.

IEqualityComparer permet des scénarios, tels que des recherches à l'aide de chaînes qui ne respectent pas la casse.

Ce constructeur est une opération O(1).

L'exemple de code suivant crée des tables de hachage à l'aide de différents constructeurs Hashtable et montre les différences de comportement des tables de hachage, même si celles-ci contiennent les mêmes éléments.

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)
    {
        if (myComparer.Compare(x, y) == 0)
        {
            return true;
        }
        else
        {
            return false;
        }
    }

    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.
        Hashtable 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.
        Hashtable 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".
        CultureInfo myCul = new CultureInfo("tr-TR");
        Hashtable 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: {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

*/


Windows 98, Windows 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Édition Media Center, Windows XP Professionnel Édition x64, Windows XP SP2, Windows XP Starter Edition

Le .NET Framework ne prend pas en charge toutes les versions de chaque plate-forme. Pour obtenir la liste des versions prises en charge, consultez Configuration requise.

.NET Framework

Prise en charge dans : 2.0

.NET Compact Framework

Prise en charge dans : 2.0

Ajouts de la communauté

AJOUTER
Afficher:
© 2016 Microsoft