次の方法で共有


Hashtable コンストラクタ (IDictionary, Single, IHashCodeProvider, IComparer)

メモ : このコンストラクタは、互換性のために残されています。

指定したディクショナリの要素を新しい Hashtable オブジェクトにコピーすることによって、Hashtable クラスの新しいインスタンスを初期化します。新しい Hashtable オブジェクトは、コピーされた要素数に等しい初期量を備えており、指定したテーブル占有率、ハッシュ コード プロバイダ、および比較演算子を使用します。

名前空間: System.Collections
アセンブリ: mscorlib (mscorlib.dll 内)

構文

'宣言
<ObsoleteAttribute("Please use Hashtable(IDictionary, float, IEqualityComparer) instead.")> _
Public Sub New ( _
    d As IDictionary, _
    loadFactor As Single, _
    hcp As IHashCodeProvider, _
    comparer As IComparer _
)
'使用
Dim d As IDictionary
Dim loadFactor As Single
Dim hcp As IHashCodeProvider
Dim comparer As IComparer

Dim instance As New Hashtable(d, loadFactor, hcp, comparer)
[ObsoleteAttribute("Please use Hashtable(IDictionary, float, IEqualityComparer) instead.")] 
public Hashtable (
    IDictionary d,
    float loadFactor,
    IHashCodeProvider hcp,
    IComparer comparer
)
[ObsoleteAttribute(L"Please use Hashtable(IDictionary, float, IEqualityComparer) instead.")] 
public:
Hashtable (
    IDictionary^ d, 
    float loadFactor, 
    IHashCodeProvider^ hcp, 
    IComparer^ comparer
)
/** @attribute ObsoleteAttribute("Please use Hashtable(IDictionary, float, IEqualityComparer) instead.") */ 
public Hashtable (
    IDictionary d, 
    float loadFactor, 
    IHashCodeProvider hcp, 
    IComparer comparer
)
ObsoleteAttribute("Please use Hashtable(IDictionary, float, IEqualityComparer) instead.") 
public function Hashtable (
    d : IDictionary, 
    loadFactor : float, 
    hcp : IHashCodeProvider, 
    comparer : IComparer
)

パラメータ

  • loadFactor
    0.1 ~ 1.0 の範囲の値。これに、最高のパフォーマンスを提供する既定値を掛けます。その結果が、バケット数に対する要素数の最大比率です。
  • hcp
    Hashtable 内のすべてのキーにハッシュ コードを提供する IHashCodeProvider オブジェクト。

    または

    各キーの Object.GetHashCode の実装である既定のハッシュ コード プロバイダを使用する場合は null 参照 (Visual Basic では Nothing)。

  • comparer
    2 つのキーが等しいかどうかを判断するために使用する IComparer オブジェクト。

    または

    各キーの Object.Equals の実装である既定の比較演算子を使用する場合は null 参照 (Visual Basic では Nothing)。

例外

例外の種類 条件

ArgumentNullException

d が null 参照 (Visual Basic では Nothing) です。

ArgumentOutOfRangeException

loadFactor が 0.1 未満です。

または

loadFactor が 1.0 より大きい値です。

解説

初期量は、コピー元のディクショナリ内の要素数に設定されます。容量は、必要に応じてテーブル占有率に基づいて自動的に増加します。

テーブル占有率は、バケット数に対する要素数の最大比率です。テーブル占有率を小さくすると、検索速度は速くなりますが、メモリの消費量は増加します。テーブル占有率 1.0 は、検索速度とサイズの最適なバランスを実現します。

実際のテーブル占有率が指定した占有率に達すると、バケット数は、現在のバケット数の 2 倍より大きい範囲で最小の素数になるように、自動的に増やされます。

ハッシュ コード プロバイダは、Hashtable オブジェクト内のキーにハッシュ コードを提供します。既定のハッシュ コード プロバイダは、キーの Object.GetHashCode の実装です。

比較演算子は 2 つのキーが等しいかどうかを判断します。Hashtable 内のすべてのキーは一意である必要があります。既定の比較演算子は、キーの Object.Equals の実装です。

カスタム ハッシュ コード プロバイダとカスタム比較演算子を使用すると、大文字と小文字を区別しない文字列検索などの処理を実行できます。

新しい Hashtable の要素は、列挙子が IDictionary オブジェクトを反復処理するのと同じ順序に並べ替えられます。

このコンストラクタは O(n) 操作です。ここで、n は d パラメータ内の要素数です。

使用例

異なる Hashtable コンストラクタを使用してハッシュ テーブルを作成し、各ハッシュ テーブルの動作の違いを示すコード例を次に示します。同じ要素が格納されていたとしても、動作が異なることがわかります。

Imports System
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 'Main 

End Class 'SamplesHashtable


'This code produces the following output.
'Results vary depending on the system's culture settings.
'
'first is in myHT1: False
'first is in myHT2: True
'first is in myHT3: False
using System;
using System.Collections;
using System.Globalization;

class myCultureComparer : IEqualityComparer
{
    public CaseInsensitiveComparer myComparer;

    public myCultureComparer()
    {
        myComparer = CaseInsensitiveComparer.DefaultInvariant;
    }

    public myCultureComparer(CultureInfo myCulture)
    {
        myComparer = new CaseInsensitiveComparer(myCulture);
    }

    public new bool Equals(object x, object y)
    {
        if (myComparer.Compare(x, y) == 0)
        {
            return true;
        }
        else
        {
            return false;
        }
    }

    public int GetHashCode(object obj)
    {
        // Compare the hash code for the lowercase versions of the strings.
        return obj.ToString().ToLower().GetHashCode();
    }
}

public class SamplesHashtable
{

    public static void Main()
    {

        // Create the dictionary.
        SortedList mySL = new SortedList();
        mySL.Add("FIRST", "Hello");
        mySL.Add("SECOND", "World");
        mySL.Add("THIRD", "!");

        // Create a hash table using the default comparer.
        Hashtable myHT1 = new Hashtable(mySL, (float).8);

        // Create a hash table using the specified IEqualityComparer that uses
        // the CaseInsensitiveComparer.DefaultInvariant to determine equality.
        Hashtable myHT2 = new Hashtable(mySL, (float).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".
        CultureInfo myCul = new CultureInfo("tr-TR");
        Hashtable myHT3 = new Hashtable(mySL, (float).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"));

    }

}


/* 
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

*/

プラットフォーム

Windows 98, Windows 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。

バージョン情報

.NET Framework

サポート対象 : 1.0、1.1
2.0 では、互換性のために残されています (コンパイル時に警告)

参照

関連項目

Hashtable クラス
Hashtable メンバ
System.Collections 名前空間