Hashtable Конструкторы

Определение

Инициализирует новый экземпляр класса Hashtable.

Перегрузки

Имя Описание
Hashtable()

Инициализирует новый, пустой экземпляр класса с помощью начальной Hashtable емкости по умолчанию, коэффициента загрузки, поставщика хэш-кода и средства сравнения.

Hashtable(Int32, Single, IHashCodeProvider, IComparer)
Устаревшие.
Устаревшие.

Инициализирует новый, пустой экземпляр класса с помощью указанной Hashtable начальной емкости, коэффициента загрузки, поставщика хэш-кода и средства сравнения.

Hashtable(IDictionary, Single, IHashCodeProvider, IComparer)
Устаревшие.
Устаревшие.

Инициализирует новый экземпляр Hashtable класса путем копирования элементов из указанного словаря в новый Hashtable объект. Новый Hashtable объект имеет начальную емкость, равную количеству скопированных элементов, и использует указанный коэффициент нагрузки, поставщик хэш-кода и средство сравнения.

Hashtable(Int32, Single, IEqualityComparer)

Инициализирует новый, пустой экземпляр класса с помощью указанной начальной емкости, коэффициента нагрузки Hashtable и IEqualityComparer объекта.

Hashtable(Int32, IHashCodeProvider, IComparer)
Устаревшие.
Устаревшие.

Инициализирует новый, пустой экземпляр класса с помощью указанной Hashtable начальной емкости, поставщика хэш-кода, сравнения и коэффициента загрузки по умолчанию.

Hashtable(IDictionary, Single, IEqualityComparer)

Инициализирует новый экземпляр Hashtable класса путем копирования элементов из указанного словаря в новый Hashtable объект. Новый Hashtable объект имеет начальную емкость, равную количеству скопированных элементов, и использует указанный коэффициент нагрузки и IEqualityComparer объект.

Hashtable(IDictionary, IHashCodeProvider, IComparer)
Устаревшие.
Устаревшие.

Инициализирует новый экземпляр Hashtable класса путем копирования элементов из указанного словаря в новый Hashtable объект. Новый Hashtable объект имеет начальную емкость, равную количеству скопированных элементов, и использует коэффициент загрузки по умолчанию, а также указанный поставщик хэш-кода и средство сравнения. Этот API устарел. Дополнительные сведения см. в статье Hashtable(IDictionary, IEqualityComparer).

Hashtable(Int32, Single)

Инициализирует новый, пустой экземпляр Hashtable класса, используя указанный начальный коэффициент емкости и нагрузки, а также поставщик хэш-кода по умолчанию и средство сравнения.

Hashtable(SerializationInfo, StreamingContext)
Устаревшие.

Инициализирует новый пустой экземпляр Hashtable класса, который сериализуется с помощью указанных SerializationInfo и StreamingContext объектов.

Hashtable(IHashCodeProvider, IComparer)
Устаревшие.
Устаревшие.
Устаревшие.

Инициализирует новый, пустой экземпляр Hashtable класса, используя начальный коэффициент емкости и нагрузки по умолчанию, а также указанный поставщик хэш-кода и средство сравнения.

Hashtable(IDictionary, Single)

Инициализирует новый экземпляр Hashtable класса путем копирования элементов из указанного словаря в новый Hashtable объект. Новый Hashtable объект имеет начальную емкость, равную количеству скопированных элементов, и использует указанный коэффициент нагрузки, а также поставщик хэш-кода по умолчанию и средство сравнения.

Hashtable(IDictionary, IEqualityComparer)

Инициализирует новый экземпляр Hashtable класса путем копирования элементов из указанного словаря в новый Hashtable объект. Новый Hashtable объект имеет начальную емкость, равную количеству скопированных элементов, и использует коэффициент загрузки по умолчанию и указанный IEqualityComparer объект.

Hashtable(Int32)

Инициализирует новый, пустой экземпляр класса с помощью указанной Hashtable начальной емкости и коэффициента загрузки по умолчанию, поставщика хэш-кода и средства сравнения.

Hashtable(IEqualityComparer)

Инициализирует новый, пустой экземпляр класса с помощью начального коэффициента Hashtable емкости и нагрузки по умолчанию и указанного IEqualityComparer объекта.

Hashtable(IDictionary)

Инициализирует новый экземпляр Hashtable класса путем копирования элементов из указанного словаря в новый Hashtable объект. Новый Hashtable объект имеет начальную емкость, равную количеству скопированных элементов, и использует коэффициент загрузки по умолчанию, поставщик хэш-кода и средство сравнения.

Hashtable(Int32, IEqualityComparer)

Инициализирует новый, пустой экземпляр класса с помощью указанной Hashtable начальной емкости и IEqualityComparerкоэффициента загрузки по умолчанию.

Hashtable()

Исходный код:
Hashtable.cs
Исходный код:
Hashtable.cs
Исходный код:
Hashtable.cs
Исходный код:
Hashtable.cs
Исходный код:
Hashtable.cs

Инициализирует новый, пустой экземпляр класса с помощью начальной Hashtable емкости по умолчанию, коэффициента загрузки, поставщика хэш-кода и средства сравнения.

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

Примеры

В следующем примере кода создаются хэш-таблицы с помощью разных Hashtable конструкторов и демонстрируются различия в поведении хэш-таблиц, даже если каждая из них содержит одни и те же элементы.

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

Комментарии

Емкость хэш-таблицы используется для вычисления оптимального количества сегментов хэш-таблиц на основе коэффициента нагрузки. Емкость автоматически увеличивается по мере необходимости.

Коэффициент нагрузки — это максимальное соотношение элементов к контейнерам. Меньший коэффициент загрузки означает более быстрое поиск по затратам на увеличение потребления памяти.

Когда фактический коэффициент нагрузки достигает указанного коэффициента нагрузки, число контейнеров автоматически увеличивается до наименьшего простого числа, которое больше, чем в два раза больше текущего числа контейнеров.

Поставщик хэш-кода отпускает хэш-коды для ключей в объекте Hashtable . Поставщик хэш-кода по умолчанию — это реализация Object.GetHashCodeключа.

Средство сравнения определяет, равны ли два ключа. Каждый ключ в объекте Hashtable должен быть уникальным. Средство сравнения по умолчанию — это реализация Object.Equalsключа.

Этот конструктор является операцией O(1) .

См. также раздел

Применяется к

Hashtable(Int32, Single, IHashCodeProvider, IComparer)

Исходный код:
Hashtable.cs
Исходный код:
Hashtable.cs
Исходный код:
Hashtable.cs
Исходный код:
Hashtable.cs
Исходный код:
Hashtable.cs

Внимание!

This constructor has been deprecated. Use Hashtable(int, float, IEqualityComparer) instead.

Внимание!

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

Инициализирует новый, пустой экземпляр класса с помощью указанной Hashtable начальной емкости, коэффициента загрузки, поставщика хэш-кода и средства сравнения.

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);
[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("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
[<System.Obsolete("Please 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)

Параметры

capacity
Int32

Приблизительное количество элементов, которые Hashtable объект может первоначально содержать.

loadFactor
Single

Число в диапазоне от 0.1 до 1.0, умноженное на значение по умолчанию, которое обеспечивает лучшую производительность. Результатом является максимальное соотношение элементов к контейнерам.

hcp
IHashCodeProvider

Объект IHashCodeProvider , предоставляющий хэш-коды для всех ключей в объекте Hashtable.

–или–

null для использования поставщика хэш-кода по умолчанию, который является реализацией GetHashCode()каждого ключа.

comparer
IComparer

Объект IComparer , используемый для определения того, равны ли два ключа.

–или–

null для использования средства сравнения по умолчанию, который является реализацией Equals(Object)каждого ключа.

Атрибуты

Исключения

capacity меньше нуля.

–или–

loadFactor меньше 0,1.

–или–

loadFactor больше 1.0.

Комментарии

Указание начальной емкости устраняет необходимость выполнения ряда операций изменения размера при добавлении элементов в Hashtable объект. Емкость автоматически увеличивается по мере необходимости на основе коэффициента нагрузки.

Коэффициент нагрузки — это максимальное соотношение элементов к контейнерам. Меньший коэффициент загрузки означает более быстрое поиск по затратам на увеличение потребления памяти. Коэффициент нагрузки 1.0 является лучшим балансом между скоростью и размером.

Когда фактический коэффициент нагрузки достигает указанного коэффициента нагрузки, число контейнеров автоматически увеличивается до наименьшего простого числа, которое больше, чем в два раза больше текущего числа контейнеров.

Поставщик хэш-кода отпускает хэш-коды для ключей Hashtableв . Поставщик хэш-кода по умолчанию — это реализация Object.GetHashCodeключа.

Средство сравнения определяет, равны ли два ключа. Каждый ключ в объекте Hashtable должен быть уникальным. Средство сравнения по умолчанию — это реализация Object.Equalsключа.

Настраиваемый поставщик хэш-кода и настраиваемый средство сравнения позволяют сценариям, таким как поиск с нечувствительными строками регистра.

Этот конструктор является операцией O(n) , где n находится capacity параметр.

См. также раздел

Применяется к

Hashtable(IDictionary, Single, IHashCodeProvider, IComparer)

Исходный код:
Hashtable.cs
Исходный код:
Hashtable.cs
Исходный код:
Hashtable.cs
Исходный код:
Hashtable.cs
Исходный код:
Hashtable.cs

Внимание!

This constructor has been deprecated. Use Hashtable(IDictionary, float, IEqualityComparer) instead.

Внимание!

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

Инициализирует новый экземпляр Hashtable класса путем копирования элементов из указанного словаря в новый Hashtable объект. Новый Hashtable объект имеет начальную емкость, равную количеству скопированных элементов, и использует указанный коэффициент нагрузки, поставщик хэш-кода и средство сравнения.

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);
[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("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
[<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
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)

Параметры

d
IDictionary

Объект IDictionary для копирования в новый Hashtable объект.

loadFactor
Single

Число в диапазоне от 0.1 до 1.0, умноженное на значение по умолчанию, которое обеспечивает лучшую производительность. Результатом является максимальное соотношение элементов к контейнерам.

hcp
IHashCodeProvider

Объект IHashCodeProvider , предоставляющий хэш-коды для всех ключей в объекте Hashtable.

–или–

null для использования поставщика хэш-кода по умолчанию, который является реализацией GetHashCode()каждого ключа.

comparer
IComparer

Объект IComparer , используемый для определения того, равны ли два ключа.

–или–

null для использования средства сравнения по умолчанию, который является реализацией Equals(Object)каждого ключа.

Атрибуты

Исключения

d равно null.

loadFactor меньше 0,1.

–или–

loadFactor больше 1.0.

Комментарии

Начальная емкость присваивается количеству элементов в исходном словаре. Емкость автоматически увеличивается по мере необходимости на основе коэффициента нагрузки.

Коэффициент нагрузки — это максимальное соотношение элементов к контейнерам. Меньший коэффициент загрузки означает более быстрое поиск по затратам на увеличение потребления памяти. Коэффициент нагрузки 1.0 является лучшим балансом между скоростью и размером.

Когда фактический коэффициент нагрузки достигает указанного коэффициента нагрузки, число контейнеров автоматически увеличивается до наименьшего простого числа, которое больше, чем в два раза больше текущего числа контейнеров.

Поставщик хэш-кода отпускает хэш-коды для ключей в объекте Hashtable . Поставщик хэш-кода по умолчанию — это реализация Object.GetHashCodeключа.

Средство сравнения определяет, равны ли два ключа. Каждый ключ в объекте Hashtable должен быть уникальным. Средство сравнения по умолчанию — это реализация Object.Equalsключа.

Настраиваемый поставщик хэш-кода и настраиваемый средство сравнения позволяют сценариям, таким как поиск с нечувствительными строками регистра.

Элементы нового Hashtable сортируются в том же порядке, в котором перечислитель выполняет итерацию по объекту IDictionary .

Этот конструктор является операцией O(n) , где n количество элементов в параметре d .

Применяется к

Hashtable(Int32, Single, IEqualityComparer)

Исходный код:
Hashtable.cs
Исходный код:
Hashtable.cs
Исходный код:
Hashtable.cs
Исходный код:
Hashtable.cs
Исходный код:
Hashtable.cs

Инициализирует новый, пустой экземпляр класса с помощью указанной начальной емкости, коэффициента нагрузки Hashtable и IEqualityComparer объекта.

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)

Параметры

capacity
Int32

Приблизительное количество элементов, которые Hashtable объект может первоначально содержать.

loadFactor
Single

Число в диапазоне от 0.1 до 1.0, умноженное на значение по умолчанию, которое обеспечивает лучшую производительность. Результатом является максимальное соотношение элементов к контейнерам.

equalityComparer
IEqualityComparer

Объект IEqualityComparer , определяющий поставщик хэш-кода и средство сравнения для использования с ним Hashtable.

–или–

null для использования поставщика хэш-кода по умолчанию и средства сравнения по умолчанию. Поставщик хэш-кода по умолчанию — это реализация GetHashCode() каждого ключа, а по умолчанию — реализация Equals(Object)каждого ключа.

Исключения

capacity меньше нуля.

–или–

loadFactor меньше 0,1.

–или–

loadFactor больше 1.0.

Примеры

В следующем примере кода создаются хэш-таблицы с помощью разных Hashtable конструкторов и демонстрируются различия в поведении хэш-таблиц, даже если каждая из них содержит одни и те же элементы.

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

Комментарии

Указание начальной емкости устраняет необходимость выполнения ряда операций изменения размера при добавлении элементов в Hashtable объект. Емкость автоматически увеличивается по мере необходимости на основе коэффициента нагрузки.

Коэффициент нагрузки — это максимальное соотношение элементов к контейнерам. Меньший коэффициент загрузки означает более быстрое поиск по затратам на увеличение потребления памяти. Коэффициент нагрузки 1.0 является лучшим балансом между скоростью и размером.

Когда фактический коэффициент нагрузки достигает указанного коэффициента нагрузки, число контейнеров автоматически увеличивается до наименьшего простого числа, которое больше, чем в два раза больше текущего числа контейнеров.

Объект IEqualityComparer включает как поставщик хэш-кода, так и средство сравнения. Если объект IEqualityComparer используется в конструкторе Hashtable , объекты, используемые в качестве ключей, Hashtable не требуют переопределения Object.GetHashCode и Object.Equals методов.

Поставщик хэш-кода отпускает хэш-коды для ключей Hashtableв . Поставщик хэш-кода по умолчанию — это реализация Object.GetHashCodeключа.

Средство сравнения определяет, равны ли два ключа. Каждый ключ в объекте Hashtable должен быть уникальным. Средство сравнения по умолчанию — это реализация Object.Equalsключа.

Включает IEqualityComparer такие сценарии, как поиск с нечувствительными строками регистра.

Этот конструктор является операцией O(n) , где n находится capacity параметр.

См. также раздел

Применяется к

Hashtable(Int32, IHashCodeProvider, IComparer)

Исходный код:
Hashtable.cs
Исходный код:
Hashtable.cs
Исходный код:
Hashtable.cs
Исходный код:
Hashtable.cs
Исходный код:
Hashtable.cs

Внимание!

This constructor has been deprecated. Use Hashtable(int, IEqualityComparer) instead.

Внимание!

Please use Hashtable(int, IEqualityComparer) instead.

Инициализирует новый, пустой экземпляр класса с помощью указанной Hashtable начальной емкости, поставщика хэш-кода, сравнения и коэффициента загрузки по умолчанию.

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);
[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("This constructor has been deprecated. Use Hashtable(int, IEqualityComparer) instead.")>]
new System.Collections.Hashtable : int * System.Collections.IHashCodeProvider * System.Collections.IComparer -> System.Collections.Hashtable
[<System.Obsolete("Please use Hashtable(int, IEqualityComparer) instead.")>]
new System.Collections.Hashtable : int * System.Collections.IHashCodeProvider * System.Collections.IComparer -> System.Collections.Hashtable
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)

Параметры

capacity
Int32

Приблизительное количество элементов, которые Hashtable объект может первоначально содержать.

hcp
IHashCodeProvider

Объект IHashCodeProvider , предоставляющий хэш-коды для всех ключей в объекте Hashtable.

–или–

null для использования поставщика хэш-кода по умолчанию, который является реализацией GetHashCode()каждого ключа.

comparer
IComparer

Объект IComparer , используемый для определения того, равны ли два ключа.

–или–

null для использования средства сравнения по умолчанию, который является реализацией Equals(Object)каждого ключа.

Атрибуты

Исключения

capacity меньше нуля.

Комментарии

Указание начальной емкости устраняет необходимость выполнения ряда операций изменения размера при добавлении элементов в Hashtable объект. Емкость автоматически увеличивается по мере необходимости на основе коэффициента нагрузки.

Коэффициент нагрузки — это максимальное соотношение элементов к контейнерам. Меньший коэффициент загрузки означает более быстрое поиск по затратам на увеличение потребления памяти.

Когда фактический коэффициент нагрузки достигает указанного коэффициента нагрузки, число контейнеров автоматически увеличивается до наименьшего простого числа, которое больше, чем в два раза больше текущего числа контейнеров.

Поставщик хэш-кода отпускает хэш-коды для ключей Hashtableв . Поставщик хэш-кода по умолчанию — это реализация Object.GetHashCodeключа.

Средство сравнения определяет, равны ли два ключа. Каждый ключ в объекте Hashtable должен быть уникальным. Средство сравнения по умолчанию — это реализация Object.Equalsключа.

Настраиваемый поставщик хэш-кода и настраиваемый средство сравнения позволяют сценариям, таким как поиск с нечувствительными строками регистра.

Этот конструктор является операцией O(n) , где n находится capacity параметр.

См. также раздел

Применяется к

Hashtable(IDictionary, Single, IEqualityComparer)

Исходный код:
Hashtable.cs
Исходный код:
Hashtable.cs
Исходный код:
Hashtable.cs
Исходный код:
Hashtable.cs
Исходный код:
Hashtable.cs

Инициализирует новый экземпляр Hashtable класса путем копирования элементов из указанного словаря в новый Hashtable объект. Новый Hashtable объект имеет начальную емкость, равную количеству скопированных элементов, и использует указанный коэффициент нагрузки и IEqualityComparer объект.

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)

Параметры

d
IDictionary

Объект IDictionary для копирования в новый Hashtable объект.

loadFactor
Single

Число в диапазоне от 0.1 до 1.0, умноженное на значение по умолчанию, которое обеспечивает лучшую производительность. Результатом является максимальное соотношение элементов к контейнерам.

equalityComparer
IEqualityComparer

Объект IEqualityComparer , определяющий поставщик хэш-кода и средство сравнения для использования с ним Hashtable.

–или–

null для использования поставщика хэш-кода по умолчанию и средства сравнения по умолчанию. Поставщик хэш-кода по умолчанию — это реализация GetHashCode() каждого ключа, а по умолчанию — реализация Equals(Object)каждого ключа.

Исключения

d равно null.

loadFactor меньше 0,1.

–или–

loadFactor больше 1.0.

Примеры

В следующем примере кода создаются хэш-таблицы с помощью разных Hashtable конструкторов и демонстрируются различия в поведении хэш-таблиц, даже если каждая из них содержит одни и те же элементы.

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

Комментарии

Начальная емкость присваивается количеству элементов в исходном словаре. Емкость автоматически увеличивается по мере необходимости на основе коэффициента нагрузки.

Коэффициент нагрузки — это максимальное соотношение элементов к контейнерам. Меньший коэффициент загрузки означает более быстрое поиск по затратам на увеличение потребления памяти. Коэффициент нагрузки 1.0 является лучшим балансом между скоростью и размером.

Когда фактический коэффициент нагрузки достигает указанного коэффициента нагрузки, число контейнеров автоматически увеличивается до наименьшего простого числа, которое больше, чем в два раза больше текущего числа контейнеров.

Объект IEqualityComparer включает как поставщик хэш-кода, так и средство сравнения. Если объект IEqualityComparer используется в конструкторе, объекты, используемые в Hashtable качестве ключей в Hashtable объекте, не требуют переопределения Object.GetHashCode и Object.Equals методов.

Поставщик хэш-кода отпускает хэш-коды для ключей Hashtableв . Поставщик хэш-кода по умолчанию — это реализация Object.GetHashCodeключа.

Средство сравнения определяет, равны ли два ключа. Каждый ключ в объекте Hashtable должен быть уникальным. Средство сравнения по умолчанию — это реализация Object.Equalsключа.

Включает IEqualityComparer такие сценарии, как поиск с нечувствительными строками регистра.

Элементы нового Hashtable сортируются в том же порядке, в котором перечислитель выполняет итерацию по объекту IDictionary .

Этот конструктор является операцией O(n) , где n количество элементов в параметре d .

См. также раздел

Применяется к

Hashtable(IDictionary, IHashCodeProvider, IComparer)

Исходный код:
Hashtable.cs
Исходный код:
Hashtable.cs
Исходный код:
Hashtable.cs
Исходный код:
Hashtable.cs
Исходный код:
Hashtable.cs

Внимание!

This constructor has been deprecated. Use Hashtable(IDictionary, IEqualityComparer) instead.

Внимание!

Please use Hashtable(IDictionary, IEqualityComparer) instead.

Инициализирует новый экземпляр Hashtable класса путем копирования элементов из указанного словаря в новый Hashtable объект. Новый Hashtable объект имеет начальную емкость, равную количеству скопированных элементов, и использует коэффициент загрузки по умолчанию, а также указанный поставщик хэш-кода и средство сравнения. Этот API устарел. Дополнительные сведения см. в статье Hashtable(IDictionary, IEqualityComparer).

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);
[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("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
[<System.Obsolete("Please 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)

Параметры

d
IDictionary

Объект IDictionary для копирования в новый Hashtable объект.

hcp
IHashCodeProvider

Объект IHashCodeProvider , предоставляющий хэш-коды для всех ключей в объекте Hashtable.

–или–

null для использования поставщика хэш-кода по умолчанию, который является реализацией GetHashCode()каждого ключа.

comparer
IComparer

Объект IComparer , используемый для определения того, равны ли два ключа.

–или–

null для использования средства сравнения по умолчанию, который является реализацией Equals(Object)каждого ключа.

Атрибуты

Исключения

d равно null.

Комментарии

Начальная емкость присваивается количеству элементов в исходном словаре. Емкость автоматически увеличивается по мере необходимости на основе коэффициента нагрузки.

Коэффициент нагрузки — это максимальное соотношение элементов к контейнерам. Меньший коэффициент загрузки означает более быстрое поиск по затратам на увеличение потребления памяти.

Когда фактический коэффициент нагрузки достигает указанного коэффициента нагрузки, число контейнеров автоматически увеличивается до наименьшего простого числа, которое больше, чем в два раза больше текущего числа контейнеров.

Поставщик хэш-кода отпускает хэш-коды для ключей в объекте Hashtable . Поставщик хэш-кода по умолчанию — это реализация Object.GetHashCodeключа.

Средство сравнения определяет, равны ли два ключа. Каждый ключ в объекте Hashtable должен быть уникальным. Средство сравнения по умолчанию — это реализация Object.Equalsключа.

Настраиваемый поставщик хэш-кода и настраиваемый средство сравнения позволяют сценариям, таким как поиск с нечувствительными строками регистра.

Элементы нового Hashtable сортируются в том же порядке, в котором перечислитель выполняет итерацию по объекту IDictionary .

Этот конструктор является операцией O(n) , где n количество элементов в параметре d .

См. также раздел

Применяется к

Hashtable(Int32, Single)

Исходный код:
Hashtable.cs
Исходный код:
Hashtable.cs
Исходный код:
Hashtable.cs
Исходный код:
Hashtable.cs
Исходный код:
Hashtable.cs

Инициализирует новый, пустой экземпляр Hashtable класса, используя указанный начальный коэффициент емкости и нагрузки, а также поставщик хэш-кода по умолчанию и средство сравнения.

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)

Параметры

capacity
Int32

Приблизительное количество элементов, которые Hashtable объект может первоначально содержать.

loadFactor
Single

Число в диапазоне от 0.1 до 1.0, умноженное на значение по умолчанию, которое обеспечивает лучшую производительность. Результатом является максимальное соотношение элементов к контейнерам.

Исключения

capacity меньше нуля.

–или–

loadFactor меньше 0,1.

–или–

loadFactor больше 1.0.

capacity вызывает переполнение.

Примеры

В следующем примере кода создаются хэш-таблицы с помощью разных Hashtable конструкторов и демонстрируются различия в поведении хэш-таблиц, даже если каждая из них содержит одни и те же элементы.

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

Комментарии

Указание начальной емкости устраняет необходимость выполнения ряда операций изменения размера при добавлении элементов в Hashtable объект. Емкость автоматически увеличивается по мере необходимости на основе коэффициента нагрузки.

Коэффициент нагрузки — это максимальное соотношение элементов к контейнерам. Меньший коэффициент загрузки означает более быстрое поиск по затратам на увеличение потребления памяти. Коэффициент нагрузки 1.0 является лучшим балансом между скоростью и размером.

Когда фактический коэффициент нагрузки достигает указанного коэффициента нагрузки, число контейнеров автоматически увеличивается до наименьшего простого числа, которое больше, чем в два раза больше текущего числа контейнеров.

Поставщик хэш-кода отпускает хэш-коды для ключей Hashtableв . Поставщик хэш-кода по умолчанию — это реализация Object.GetHashCodeключа.

Средство сравнения определяет, равны ли два ключа. Каждый ключ в объекте Hashtable должен быть уникальным. Средство сравнения по умолчанию — это реализация Object.Equalsключа.

Этот конструктор является операцией O(n) , где n находится capacity параметр.

См. также раздел

Применяется к

Hashtable(SerializationInfo, StreamingContext)

Исходный код:
Hashtable.cs
Исходный код:
Hashtable.cs
Исходный код:
Hashtable.cs
Исходный код:
Hashtable.cs
Исходный код:
Hashtable.cs

Внимание!

This API supports obsolete formatter-based serialization. It should not be called or extended by application code.

Инициализирует новый пустой экземпляр Hashtable класса, который сериализуется с помощью указанных SerializationInfo и StreamingContext объектов.

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);
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}")>]
new System.Collections.Hashtable : System.Runtime.Serialization.SerializationInfo * System.Runtime.Serialization.StreamingContext -> System.Collections.Hashtable
new System.Collections.Hashtable : System.Runtime.Serialization.SerializationInfo * System.Runtime.Serialization.StreamingContext -> System.Collections.Hashtable
Protected Sub New (info As SerializationInfo, context As StreamingContext)

Параметры

info
SerializationInfo

SerializationInfo Объект, содержащий сведения, необходимые для сериализации Hashtable объекта.

context
StreamingContext

StreamingContext Объект, содержащий источник и назначение сериализованного потока, связанного с нимHashtable.

Атрибуты

Исключения

info равно null.

Комментарии

Емкость хэш-таблицы используется для вычисления оптимального количества сегментов хэш-таблиц на основе коэффициента нагрузки. Емкость автоматически увеличивается по мере необходимости.

Коэффициент нагрузки — это максимальное соотношение элементов к контейнерам. Меньший коэффициент загрузки означает более быстрое поиск по затратам на увеличение потребления памяти.

Когда фактический коэффициент нагрузки достигает указанного коэффициента нагрузки, число контейнеров автоматически увеличивается до наименьшего простого числа, которое больше, чем в два раза больше текущего числа контейнеров.

Поставщик хэш-кода отпускает хэш-коды для ключей в объекте Hashtable . Поставщик хэш-кода по умолчанию — это реализация Object.GetHashCodeключа.

Средство сравнения определяет, равны ли два ключа. Каждый ключ в объекте Hashtable должен быть уникальным. Средство сравнения по умолчанию — это реализация Object.Equalsключа.

Этот конструктор является операцией O(n) , где n находится Count.

Так как сериализация и десериализация перечислителя может Hashtable привести к переупорядочению элементов, невозможно продолжить перечисление без вызова Reset метода.

См. также раздел

Применяется к

Hashtable(IHashCodeProvider, IComparer)

Исходный код:
Hashtable.cs
Исходный код:
Hashtable.cs
Исходный код:
Hashtable.cs
Исходный код:
Hashtable.cs
Исходный код:
Hashtable.cs

Внимание!

This constructor has been deprecated. Use Hashtable(IEqualityComparer) instead.

Внимание!

Please use Hashtable(IEqualityComparer) instead.

Внимание!

This constructor has been deprecated. Use Hashtable(IEqualityComparer).

Инициализирует новый, пустой экземпляр Hashtable класса, используя начальный коэффициент емкости и нагрузки по умолчанию, а также указанный поставщик хэш-кода и средство сравнения.

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);
[System.Obsolete("This constructor has been deprecated. Use Hashtable(IEqualityComparer).")]
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("This constructor has been deprecated. Use Hashtable(IEqualityComparer) instead.")>]
new System.Collections.Hashtable : System.Collections.IHashCodeProvider * System.Collections.IComparer -> System.Collections.Hashtable
[<System.Obsolete("Please use Hashtable(IEqualityComparer) instead.")>]
new System.Collections.Hashtable : System.Collections.IHashCodeProvider * System.Collections.IComparer -> System.Collections.Hashtable
[<System.Obsolete("This constructor has been deprecated. Use Hashtable(IEqualityComparer).")>]
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)

Параметры

hcp
IHashCodeProvider

Объект IHashCodeProvider , предоставляющий хэш-коды для всех ключей в объекте Hashtable .

–или–

null для использования поставщика хэш-кода по умолчанию, который является реализацией GetHashCode()каждого ключа.

comparer
IComparer

Объект IComparer , используемый для определения того, равны ли два ключа.

–или–

null для использования средства сравнения по умолчанию, который является реализацией Equals(Object)каждого ключа.

Атрибуты

Комментарии

Емкость хэш-таблицы используется для вычисления оптимального количества сегментов хэш-таблиц на основе коэффициента нагрузки. Емкость автоматически увеличивается по мере необходимости.

Коэффициент нагрузки — это максимальное соотношение элементов к контейнерам. Меньший коэффициент загрузки означает более быстрое поиск по затратам на увеличение потребления памяти.

Когда фактический коэффициент нагрузки достигает указанного коэффициента нагрузки, число контейнеров автоматически увеличивается до наименьшего простого числа, которое больше, чем в два раза больше текущего числа контейнеров.

Поставщик хэш-кода отпускает хэш-коды для ключей в объекте Hashtable . Поставщик хэш-кода по умолчанию — это реализация Object.GetHashCodeключа.

Средство сравнения определяет, равны ли два ключа. Каждый ключ в объекте Hashtable должен быть уникальным. Средство сравнения по умолчанию — это реализация Object.Equalsключа.

Настраиваемый поставщик хэш-кода и настраиваемый средство сравнения позволяют сценариям, таким как поиск с нечувствительными строками регистра.

Этот конструктор является операцией O(1) .

См. также раздел

Применяется к

Hashtable(IDictionary, Single)

Исходный код:
Hashtable.cs
Исходный код:
Hashtable.cs
Исходный код:
Hashtable.cs
Исходный код:
Hashtable.cs
Исходный код:
Hashtable.cs

Инициализирует новый экземпляр Hashtable класса путем копирования элементов из указанного словаря в новый Hashtable объект. Новый Hashtable объект имеет начальную емкость, равную количеству скопированных элементов, и использует указанный коэффициент нагрузки, а также поставщик хэш-кода по умолчанию и средство сравнения.

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)

Параметры

d
IDictionary

Объект IDictionary для копирования в новый Hashtable объект.

loadFactor
Single

Число в диапазоне от 0.1 до 1.0, умноженное на значение по умолчанию, которое обеспечивает лучшую производительность. Результатом является максимальное соотношение элементов к контейнерам.

Исключения

d равно null.

loadFactor меньше 0,1.

–или–

loadFactor больше 1.0.

Примеры

В следующем примере кода создаются хэш-таблицы с помощью разных Hashtable конструкторов и демонстрируются различия в поведении хэш-таблиц, даже если каждая из них содержит одни и те же элементы.

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

Комментарии

Начальная емкость присваивается количеству элементов в исходном словаре. Емкость автоматически увеличивается по мере необходимости на основе коэффициента нагрузки.

Коэффициент нагрузки — это максимальное соотношение элементов к контейнерам. Меньший коэффициент загрузки означает более быстрое поиск по затратам на увеличение потребления памяти. Коэффициент нагрузки 1.0 является лучшим балансом между скоростью и размером.

Когда фактический коэффициент нагрузки достигает указанного коэффициента нагрузки, число контейнеров автоматически увеличивается до наименьшего простого числа, которое больше, чем в два раза больше текущего числа контейнеров.

Поставщик хэш-кода отпускает хэш-коды для ключей в объекте Hashtable . Поставщик хэш-кода по умолчанию — это реализация Object.GetHashCodeключа.

Средство сравнения определяет, равны ли два ключа. Каждый ключ в объекте Hashtable должен быть уникальным. Средство сравнения по умолчанию — это реализация Object.Equalsключа.

Элементы нового Hashtable сортируются в том же порядке, в котором перечислитель выполняет итерацию по объекту IDictionary .

Этот конструктор является операцией O(n) , где n количество элементов в параметре d .

См. также раздел

Применяется к

Hashtable(IDictionary, IEqualityComparer)

Исходный код:
Hashtable.cs
Исходный код:
Hashtable.cs
Исходный код:
Hashtable.cs
Исходный код:
Hashtable.cs
Исходный код:
Hashtable.cs

Инициализирует новый экземпляр Hashtable класса путем копирования элементов из указанного словаря в новый Hashtable объект. Новый Hashtable объект имеет начальную емкость, равную количеству скопированных элементов, и использует коэффициент загрузки по умолчанию и указанный IEqualityComparer объект.

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)

Параметры

d
IDictionary

Объект IDictionary для копирования в новый Hashtable объект.

equalityComparer
IEqualityComparer

Объект IEqualityComparer , определяющий поставщик хэш-кода и средство сравнения для использования с ним Hashtable.

–или–

null для использования поставщика хэш-кода по умолчанию и средства сравнения по умолчанию. Поставщик хэш-кода по умолчанию — это реализация GetHashCode() каждого ключа, а по умолчанию — реализация Equals(Object)каждого ключа.

Исключения

d равно null.

Примеры

В следующем примере кода создаются хэш-таблицы с помощью разных Hashtable конструкторов и демонстрируются различия в поведении хэш-таблиц, даже если каждая из них содержит одни и те же элементы.

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

Комментарии

Начальная емкость присваивается количеству элементов в исходном словаре. Емкость автоматически увеличивается по мере необходимости на основе коэффициента нагрузки.

Коэффициент нагрузки — это максимальное соотношение элементов к контейнерам. Меньший коэффициент загрузки означает более быстрое поиск по затратам на увеличение потребления памяти.

Когда фактический коэффициент нагрузки достигает указанного коэффициента нагрузки, число контейнеров автоматически увеличивается до наименьшего простого числа, которое больше, чем в два раза больше текущего числа контейнеров.

Объект IEqualityComparer включает как поставщик хэш-кода, так и средство сравнения. Если объект IEqualityComparer используется в конструкторе, объекты, используемые в Hashtable качестве ключей в Hashtable объекте, не требуют переопределения Object.GetHashCode и Object.Equals методов.

Поставщик хэш-кода отпускает хэш-коды для ключей Hashtableв . Поставщик хэш-кода по умолчанию — это реализация Object.GetHashCodeключа.

Средство сравнения определяет, равны ли два ключа. Каждый ключ в объекте Hashtable должен быть уникальным. Средство сравнения по умолчанию — это реализация Object.Equalsключа.

Включает IEqualityComparer такие сценарии, как поиск с нечувствительными строками регистра.

Элементы нового Hashtable сортируются в том же порядке, в котором перечислитель выполняет итерацию по объекту IDictionary .

Этот конструктор является операцией O(n) , где n количество элементов в параметре d .

См. также раздел

Применяется к

Hashtable(Int32)

Исходный код:
Hashtable.cs
Исходный код:
Hashtable.cs
Исходный код:
Hashtable.cs
Исходный код:
Hashtable.cs
Исходный код:
Hashtable.cs

Инициализирует новый, пустой экземпляр класса с помощью указанной Hashtable начальной емкости и коэффициента загрузки по умолчанию, поставщика хэш-кода и средства сравнения.

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

Параметры

capacity
Int32

Приблизительное количество элементов, которые Hashtable объект может первоначально содержать.

Исключения

capacity меньше нуля.

Примеры

В следующем примере кода создаются хэш-таблицы с помощью разных Hashtable конструкторов и демонстрируются различия в поведении хэш-таблиц, даже если каждая из них содержит одни и те же элементы.

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

Комментарии

Указание начальной емкости устраняет необходимость выполнения ряда операций изменения размера при добавлении элементов в Hashtable объект. Емкость автоматически увеличивается по мере необходимости на основе коэффициента нагрузки.

Коэффициент нагрузки — это максимальное соотношение элементов к контейнерам. Меньший коэффициент загрузки означает более быстрое поиск по затратам на увеличение потребления памяти.

Когда фактический коэффициент нагрузки достигает указанного коэффициента нагрузки, число контейнеров автоматически увеличивается до наименьшего простого числа, которое больше, чем в два раза больше текущего числа контейнеров.

Поставщик хэш-кода отпускает хэш-коды для ключей Hashtableв . Поставщик хэш-кода по умолчанию — это реализация Object.GetHashCodeключа.

Средство сравнения определяет, равны ли два ключа. Каждый ключ в объекте Hashtable должен быть уникальным. Средство сравнения по умолчанию — это реализация Object.Equalsключа.

Этот конструктор является операцией O(n) , где n находится capacity.

См. также раздел

Применяется к

Hashtable(IEqualityComparer)

Исходный код:
Hashtable.cs
Исходный код:
Hashtable.cs
Исходный код:
Hashtable.cs
Исходный код:
Hashtable.cs
Исходный код:
Hashtable.cs

Инициализирует новый, пустой экземпляр класса с помощью начального коэффициента Hashtable емкости и нагрузки по умолчанию и указанного IEqualityComparer объекта.

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)

Параметры

equalityComparer
IEqualityComparer

Объект IEqualityComparer , определяющий поставщик хэш-кода и средство сравнения для использования с Hashtable объектом.

–или–

null для использования поставщика хэш-кода по умолчанию и средства сравнения по умолчанию. Поставщик хэш-кода по умолчанию — это реализация GetHashCode() каждого ключа, а по умолчанию — реализация Equals(Object)каждого ключа.

Примеры

В следующем примере кода создаются хэш-таблицы с помощью разных Hashtable конструкторов и демонстрируются различия в поведении хэш-таблиц, даже если каждая из них содержит одни и те же элементы.

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

Комментарии

Емкость хэш-таблицы используется для вычисления оптимального количества сегментов хэш-таблиц на основе коэффициента нагрузки. Емкость автоматически увеличивается по мере необходимости.

Коэффициент нагрузки — это максимальное соотношение элементов к контейнерам. Меньший коэффициент загрузки означает более быстрое поиск по затратам на увеличение потребления памяти.

Когда фактический коэффициент нагрузки достигает указанного коэффициента нагрузки, число контейнеров автоматически увеличивается до наименьшего простого числа, которое больше, чем в два раза больше текущего числа контейнеров.

Объект IEqualityComparer включает как поставщик хэш-кода, так и средство сравнения. Если объект IEqualityComparer используется в конструкторе, объекты, используемые в Hashtable качестве ключей в Hashtable объекте, не требуют переопределения Object.GetHashCode и Object.Equals методов.

Поставщик хэш-кода отпускает хэш-коды для ключей Hashtableв . Поставщик хэш-кода по умолчанию — это реализация Object.GetHashCodeключа.

Средство сравнения определяет, равны ли два ключа. Каждый ключ в объекте Hashtable должен быть уникальным. Средство сравнения по умолчанию — это реализация Object.Equalsключа.

Включает IEqualityComparer такие сценарии, как поиск с нечувствительными строками регистра.

Этот конструктор является операцией O(1) .

См. также раздел

Применяется к

Hashtable(IDictionary)

Исходный код:
Hashtable.cs
Исходный код:
Hashtable.cs
Исходный код:
Hashtable.cs
Исходный код:
Hashtable.cs
Исходный код:
Hashtable.cs

Инициализирует новый экземпляр Hashtable класса путем копирования элементов из указанного словаря в новый Hashtable объект. Новый Hashtable объект имеет начальную емкость, равную количеству скопированных элементов, и использует коэффициент загрузки по умолчанию, поставщик хэш-кода и средство сравнения.

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)

Параметры

d
IDictionary

Объект IDictionary для копирования в новый Hashtable объект.

Исключения

d равно null.

Примеры

В следующем примере кода создаются хэш-таблицы с помощью разных Hashtable конструкторов и демонстрируются различия в поведении хэш-таблиц, даже если каждая из них содержит одни и те же элементы.

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

Комментарии

Начальная емкость присваивается количеству элементов в исходном словаре. Емкость автоматически увеличивается по мере необходимости на основе коэффициента нагрузки.

Коэффициент нагрузки — это максимальное соотношение элементов к контейнерам. Меньший коэффициент загрузки означает более быстрое поиск по затратам на увеличение потребления памяти.

Когда фактический коэффициент нагрузки достигает указанного коэффициента нагрузки, число контейнеров автоматически увеличивается до наименьшего простого числа, которое больше, чем в два раза больше текущего числа контейнеров.

Поставщик хэш-кода отпускает хэш-коды для ключей в объекте Hashtable . Поставщик хэш-кода по умолчанию — это реализация Object.GetHashCodeключа.

Средство сравнения определяет, равны ли два ключа. Каждый ключ в объекте Hashtable должен быть уникальным. Средство сравнения по умолчанию — это реализация Object.Equalsключа.

Элементы нового Hashtable сортируются в том же порядке, в котором перечислитель выполняет итерацию по объекту IDictionary .

Этот конструктор является операцией O(n) , где n количество элементов в параметре d .

См. также раздел

Применяется к

Hashtable(Int32, IEqualityComparer)

Исходный код:
Hashtable.cs
Исходный код:
Hashtable.cs
Исходный код:
Hashtable.cs
Исходный код:
Hashtable.cs
Исходный код:
Hashtable.cs

Инициализирует новый, пустой экземпляр класса с помощью указанной Hashtable начальной емкости и IEqualityComparerкоэффициента загрузки по умолчанию.

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)

Параметры

capacity
Int32

Приблизительное количество элементов, которые Hashtable объект может первоначально содержать.

equalityComparer
IEqualityComparer

Объект IEqualityComparer , определяющий поставщик хэш-кода и средство сравнения для использования с ним Hashtable.

–или–

null для использования поставщика хэш-кода по умолчанию и средства сравнения по умолчанию. Поставщик хэш-кода по умолчанию — это реализация GetHashCode() каждого ключа, а по умолчанию — реализация Equals(Object)каждого ключа.

Исключения

capacity меньше нуля.

Примеры

В следующем примере кода создаются хэш-таблицы с помощью разных Hashtable конструкторов и демонстрируются различия в поведении хэш-таблиц, даже если каждая из них содержит одни и те же элементы.

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

Комментарии

Указание начальной емкости устраняет необходимость выполнения ряда операций изменения размера при добавлении элементов в Hashtable объект. Емкость автоматически увеличивается по мере необходимости на основе коэффициента нагрузки.

Коэффициент нагрузки — это максимальное соотношение элементов к контейнерам. Меньший коэффициент загрузки означает более быстрое поиск по затратам на увеличение потребления памяти.

Когда фактический коэффициент нагрузки достигает указанного коэффициента нагрузки, число контейнеров автоматически увеличивается до наименьшего простого числа, которое больше, чем в два раза больше текущего числа контейнеров.

Объект IEqualityComparer включает как поставщик хэш-кода, так и средство сравнения. Если объект IEqualityComparer используется в конструкторе Hashtable , объекты, используемые в качестве ключей, Hashtable не требуют переопределения Object.GetHashCode и Object.Equals методов.

Поставщик хэш-кода отпускает хэш-коды для ключей Hashtableв . Поставщик хэш-кода по умолчанию — это реализация Object.GetHashCodeключа.

Средство сравнения определяет, равны ли два ключа. Каждый ключ в объекте Hashtable должен быть уникальным. Средство сравнения по умолчанию — это реализация Object.Equalsключа.

Включает IEqualityComparer такие сценарии, как поиск с нечувствительными строками регистра.

Этот конструктор является операцией O(n) , где n находится capacity параметр.

См. также раздел

Применяется к