Cet article a fait l’objet d’une traduction automatique. Pour afficher l’article en anglais, activez la case d’option Anglais. Vous pouvez également afficher le texte anglais dans une fenêtre contextuelle en faisant glisser le pointeur de la souris sur le texte traduit.
Traduction
Anglais

Hashtable constructeur (IHashCodeProvider, IComparer)

 

Date de publication : novembre 2016

Remarque : Cette API est désormais obsolète.

Initialise une nouvelle instance vide de la Hashtable classe à l’aide de la capacité initiale par défaut et le facteur de charge et le fournisseur de code de hachage spécifié et comparateur.

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

[ObsoleteAttribute("Please use Hashtable(IEqualityComparer) instead.")]
public Hashtable(
	IHashCodeProvider hcp,
	IComparer comparer
)

Paramètres

hcp
Type: System.Collections.IHashCodeProvider

Le IHashCodeProvider les codes d’objet qui fournit le hachage de toutes les clés dans le Hashtable objet.

ou

null Pour utiliser le fournisseur de code de hachage par défaut, qui est l’implémentation de chaque clé de Object.GetHashCode.

comparer
Type: System.Collections.IComparer

Le IComparer objet à utiliser pour déterminer si deux clés sont égales.

ou

null Pour utiliser le comparateur par défaut, qui est l’implémentation de chaque clé de Object.Equals.

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. Capacité est automatiquement augmentée en fonction des besoins.

Le facteur de charge est le ratio maximal d’éléments par compartiment. Un facteur de charge plus petit signifie une recherche plus rapide au détriment de la consommation de mémoire accrue.

Lorsque le facteur de charge de travail atteint le facteur de charge spécifié, le nombre de compartiments est automatiquement augmenté pour le plus petit nombre premier supérieur à deux fois le nombre actuel de compartiments.

Le fournisseur de code de hachage fournit les codes de hachage des clés dans le Hashtable objet. 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é dans un Hashtable doit être unique. Le comparateur par défaut est l’implémentation de clé de Object.Equals.

Le fournisseur de code de hachage personnalisé et le comparateur personnalisé activer des scénarios tels que les recherches avec des chaînes sans respecter 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 Hashtable constructeurs et illustre les différences de comportement entre les 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

*/

.NET Framework
Disponible depuis 1.1
Retour au début
Afficher: