HashTable、hashSetとDictionaryの違い点まとめ
3971 ワード
今日はまた面接に行きました。結果は相変わらず悲しくて、普段は表面的なものに注目しすぎて、内容はよく分かりません。
1.HashTable
ハッシュ・テーブルは、キー/値ペアのセットを表している。NET Fraamewarkでは、HashtableはSystem.Coollectionsの名前空間に提供されるコンテナであり、key-valueのようなキー値ペアを処理して表現するために使用されます。その中でkeyは通常、素早く検索するために使用されます。valueは、keyに対応する値を記憶するために使用される。Hashtableではkey-valueキーのペアはすべてobjectタイプですので、Hashtableは任意のタイプのkeyvalueキーのペアをサポートしてもいいです。null以外のオブジェクトはキーまたは値として使用できます。
ハッシュテーブルにkey/キーペアを追加します。Hashtable Object.Add(key);
ハッシュテーブルでは、あるキー/キーペアを削除します。Hashtable Object.Remove(key);
ハッシュ表からすべての要素を削除します。Hashtable Object.Clear()
ハッシュテーブルには特定のキーキーキーが含まれているかどうかを判断する。
2.hashSet
HashSet類は主に高性能セット演算を行うために設計されています。例えば、2つのセットが交差し、集合し、差セットなどです。セットには重複して出現しない、特徴的な順序のない要素が含まれており、繰り返しオブジェクトを受け入れることを拒否する。
HashSet<T>のいくつかの特性は以下の通りである。
a.HashSet<T>の値は重複できず、順序がない。
b.hashSet<T>の容量は必要に応じて自動的に追加されます。
3.Dictionary
Dictionaryはキーと値のセットを表します。
Dictionaryは汎型です。
彼自身は集合の機能を持っています。時にはそれを行列と見なすことができます。
彼の構造はこうです。ディctionary<[key]、[value]>
彼の特徴は、預け入れの対象は「key」の値に対応した預け入れが必要です。
ある一定の[key]を通じて対応する値を見つけます。
4.HashTableとDictionaryの違い:
(1).HashTableは汎型をサポートしないが、Dictionaryは汎型をサポートする。
(2)Hashtableの要素はObjectタイプに属するので、値の種類を格納または検索する際には通常箱詰めや箱引きの操作が発生するので、いくつかのタイプの変換操作が必要かもしれません。また、int、floatのような値の種類については箱詰めなどの操作が必要です。
(3)単一スレッドプログラムではDictionaryの使用が推奨され、一般的な利点があり、読み取り速度が速く、容量の利用がより十分である。マルチスレッドプログラムでは、Hashtableを推奨していますが、デフォルトのHashtableは、単一スレッド書き込み、マルチスレッド読み取りを許可しています。Hashtableに対して、Synchronized()をさらに呼び出して、完全スレッドセキュリティを得ることができます。Dictoraryはスレッドセキュリティではなく、人がlock文を使用して保護しなければなりません。
(4)コードテストを通してkeyが整数型Dictoraryであることが分かりました。Hashtableよりも効率が速く、keyが文字列型であれば、Dictoraryの効率はhashtableほど速くないです。
面接は満足できる仕事を探すためだけではなく、その中からどのようにコミュニケーションし、どのように自分を売り込みますか?もっと重要なのは自分の足りないところを知ることです。
ここで、HashTable、hashSetとDictionaryの違いについてまとめた文章を紹介します。HashTable、hashSetとDictioryの違いについては、以前の文章を検索したり、次の関連記事を見たりしてください。これからもよろしくお願いします。
1.HashTable
ハッシュ・テーブルは、キー/値ペアのセットを表している。NET Fraamewarkでは、HashtableはSystem.Coollectionsの名前空間に提供されるコンテナであり、key-valueのようなキー値ペアを処理して表現するために使用されます。その中でkeyは通常、素早く検索するために使用されます。valueは、keyに対応する値を記憶するために使用される。Hashtableではkey-valueキーのペアはすべてobjectタイプですので、Hashtableは任意のタイプのkeyvalueキーのペアをサポートしてもいいです。null以外のオブジェクトはキーまたは値として使用できます。
ハッシュテーブルにkey/キーペアを追加します。Hashtable Object.Add(key);
ハッシュテーブルでは、あるキー/キーペアを削除します。Hashtable Object.Remove(key);
ハッシュ表からすべての要素を削除します。Hashtable Object.Clear()
ハッシュテーブルには特定のキーキーキーが含まれているかどうかを判断する。
2.hashSet
HashSet
HashSet<T>のいくつかの特性は以下の通りである。
a.HashSet<T>の値は重複できず、順序がない。
b.hashSet<T>の容量は必要に応じて自動的に追加されます。
3.Dictionary
Dictionaryはキーと値のセットを表します。
Dictionary
彼自身は集合の機能を持っています。時にはそれを行列と見なすことができます。
彼の構造はこうです。ディctionary<[key]、[value]>
彼の特徴は、預け入れの対象は「key」の値に対応した預け入れが必要です。
ある一定の[key]を通じて対応する値を見つけます。
4.HashTableとDictionaryの違い:
(1).HashTableは汎型をサポートしないが、Dictionaryは汎型をサポートする。
(2)Hashtableの要素はObjectタイプに属するので、値の種類を格納または検索する際には通常箱詰めや箱引きの操作が発生するので、いくつかのタイプの変換操作が必要かもしれません。また、int、floatのような値の種類については箱詰めなどの操作が必要です。
(3)単一スレッドプログラムではDictionaryの使用が推奨され、一般的な利点があり、読み取り速度が速く、容量の利用がより十分である。マルチスレッドプログラムでは、Hashtableを推奨していますが、デフォルトのHashtableは、単一スレッド書き込み、マルチスレッド読み取りを許可しています。Hashtableに対して、Synchronized()をさらに呼び出して、完全スレッドセキュリティを得ることができます。Dictoraryはスレッドセキュリティではなく、人がlock文を使用して保護しなければなりません。
(4)コードテストを通してkeyが整数型Dictoraryであることが分かりました。Hashtableよりも効率が速く、keyが文字列型であれば、Dictoraryの効率はhashtableほど速くないです。
static void IntMethod()
{
int count = 1000000;
Dictionary<int, int> dictionary = new Dictionary<int, int>();
Hashtable hashtable = new Hashtable();
for (int i = 0; i < count; i++)
{
dictionary.Add(i,i);
hashtable.Add(i,i);
}
Stopwatch stopwatch = Stopwatch.StartNew();
for (int i = 0; i < count; i++)
{
int value = dictionary[i];
}
stopwatch.Stop();
Console.WriteLine(stopwatch.ElapsedMilliseconds);
stopwatch = Stopwatch.StartNew();
for (int i = 0; i < count; i++)
{
object value = hashtable[i];
}
stopwatch.Stop();
Console.WriteLine(stopwatch.ElapsedMilliseconds);
}
static void MethodString()
{
int count = 1000000;
Dictionary<string, string> dictionary = new Dictionary<string, string>();
Hashtable hashtable=new Hashtable();
for (int i = 0; i < count; i++)
{
dictionary.Add(i.ToString(),"aaa");
hashtable.Add(i.ToString(),"aaa");
}
Stopwatch stopwatch = Stopwatch.StartNew();
for (int i = 0; i < count; i++)
{
string value=dictionary[i.ToString()];
}
stopwatch.Stop();
Console.WriteLine(stopwatch.ElapsedMilliseconds);
stopwatch = Stopwatch.StartNew();
for (int i = 0; i < count; i++)
{
object value = hashtable[i.ToString()];
}
stopwatch.Stop();
Console.WriteLine(stopwatch.ElapsedMilliseconds);
}
今日の面接の最大の収获は以上のものを総括するのではなく、表面を追求しないで多くのものを理解させました。どんな机能を完成するためではなく、ある技术を勉强します。三人の面接官はとても素晴らしいです。普段はあまり使わないものをたくさん話して、彼らと一緒に交流して、多くのことを学びます。今後はこのような会社に入って、自分を成長させたいです。面接は満足できる仕事を探すためだけではなく、その中からどのようにコミュニケーションし、どのように自分を売り込みますか?もっと重要なのは自分の足りないところを知ることです。
ここで、HashTable、hashSetとDictionaryの違いについてまとめた文章を紹介します。HashTable、hashSetとDictioryの違いについては、以前の文章を検索したり、次の関連記事を見たりしてください。これからもよろしくお願いします。