メモ : このコンストラクタは、互換性のために残されています。
指定した初期量、テーブル占有率、ハッシュ コード プロバイダ、および比較演算子を使用して、Hashtable クラスの新しい空のインスタンスを初期化します。
名前空間: System.Collections
アセンブリ: mscorlib (mscorlib.dll 内)
構文
'宣言
<ObsoleteAttribute("Please use Hashtable(int, float, IEqualityComparer) instead.")> _
Public Sub New ( _
capacity As Integer, _
loadFactor As Single, _
hcp As IHashCodeProvider, _
comparer As IComparer _
)
'使用
Dim capacity As Integer
Dim loadFactor As Single
Dim hcp As IHashCodeProvider
Dim comparer As IComparer
Dim instance As New Hashtable(capacity, loadFactor, hcp, comparer)
[ObsoleteAttribute("Please use Hashtable(int, float, IEqualityComparer) instead.")]
public Hashtable (
int capacity,
float loadFactor,
IHashCodeProvider hcp,
IComparer comparer
)
[ObsoleteAttribute(L"Please use Hashtable(int, float, IEqualityComparer) instead.")]
public:
Hashtable (
int capacity,
float loadFactor,
IHashCodeProvider^ hcp,
IComparer^ comparer
)
/** @attribute ObsoleteAttribute("Please use Hashtable(int, float, IEqualityComparer) instead.") */
public Hashtable (
int capacity,
float loadFactor,
IHashCodeProvider hcp,
IComparer comparer
)
ObsoleteAttribute("Please use Hashtable(int, float, IEqualityComparer) instead.")
public function Hashtable (
capacity : int,
loadFactor : float,
hcp : IHashCodeProvider,
comparer : IComparer
)
パラメータ
- capacity
Hashtable オブジェクトが初期状態で格納できる要素の概数。
- loadFactor
0.1 ~ 1.0 の範囲の値。これに、最高のパフォーマンスを提供する既定値を掛けます。その結果が、バケット数に対する要素数の最大比率です。
hcp
Hashtable 内のすべてのキーにハッシュ コードを提供する IHashCodeProvider オブジェクト。または
各キーの Object.GetHashCode の実装である既定のハッシュ コード プロバイダを使用する場合は null 参照 (Visual Basic では Nothing)。
comparer
2 つのキーが等しいかどうかを判断するために使用する IComparer オブジェクト。または
各キーの Object.Equals の実装である既定の比較演算子を使用する場合は null 参照 (Visual Basic では Nothing)。
例外
| 例外の種類 | 条件 |
|---|---|
capacity が 0 未満です。 または loadFactor が 0.1 未満です。 または loadFactor が 1.0 より大きい値です。 |
解説
初期量を指定すると、Hashtable オブジェクトに要素を追加するときに、サイズ変更操作を何度も実行する必要がなくなります。容量は、必要に応じてテーブル占有率に基づいて自動的に増加します。
テーブル占有率は、バケット数に対する要素数の最大比率です。テーブル占有率を小さくすると、検索速度は速くなりますが、メモリの消費量は増加します。テーブル占有率 1.0 は、検索速度とサイズの最適なバランスを実現します。
実際のテーブル占有率が指定した占有率に達すると、バケット数は、現在のバケット数の 2 倍より大きい範囲で最小の素数になるように、自動的に増やされます。
ハッシュ コード プロバイダは、Hashtable 内のキーにハッシュ コードを提供します。既定のハッシュ コード プロバイダは、キーの Object.GetHashCode の実装です。
比較演算子は 2 つのキーが等しいかどうかを判断します。Hashtable 内のすべてのキーは一意である必要があります。既定の比較演算子は、キーの Object.Equals の実装です。
カスタム ハッシュ コード プロバイダとカスタム比較演算子を使用すると、大文字と小文字を区別しない文字列検索などの処理を実行できます。
このコンストラクタは O(n) 操作です。ここで、n は capacity パラメータです。
使用例
異なる 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 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 '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 a hash table using the default comparer.
Hashtable myHT1 = new Hashtable(3, (float).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.
Hashtable myHT2 = new Hashtable(3, (float).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".
CultureInfo myCul = new CultureInfo("tr-TR");
Hashtable myHT3 = new Hashtable(3, (float).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"));
}
}
/*
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 名前空間
IHashCodeProvider
IComparer
Object.GetHashCode
Object.Equals