[解決済み] [Solved] .Net データ構造。ArrayList, List, HashTable, Dictionary, SortedList, SortedDictionary -- 速度、メモリ、そしてそれぞれを使うべきタイミングは?[クローズド]。
質問
.NETには複雑なデータ構造がたくさんあります。残念ながら、中にはよく似たものもあり、いつ使って、いつ別のものを使うのか、いつもよくわからない。私が持っているC#やVBの本のほとんどは、それらについてある程度は触れていますが、本当の意味での詳細には触れていないのです。
Array、ArrayList、List、Hashtable、Dictionary、SortedList、SortedDictionaryの違いは何ですか?
列挙可能なものはどれか(IList -- 'foreach'ループが可能)?キーと値のペアを使うのはどれですか(IDict)?
メモリフットプリントはどうでしょうか?挿入速度は?検索速度は?
他に特筆すべきデータ構造はありますか?
メモリ使用量と速度(Big-O表記)の詳細については、まだ模索中です
どのように解決するのですか?
思いつくままに
-
Array
* - 古いタイプのメモリー配列で、通常のメモリー配列の別名のようなものです。type[]
配列になります。列挙できる。自動的には大きくならない。非常に高速な挿入・取り出し速度を想定している。 -
ArrayList
- 自動生成される配列。より多くのオーバーヘッドを追加します。通常の配列より遅いかもしれませんが、それでもかなり速いです。これらは.NETで多く使われている。 -
List
- ジェネリックスと一緒に使うことで、強く型付けされた配列を持つことができます。List<string>
. それ以外の動作はArrayList
-
Hashtable
- 古いハッシュテーブル。最悪の場合O(1)からO(n)です。valueとkeysのプロパティを列挙し、key/valのペアを作ることができる。 -
Dictionary
- のように、ジェネリックスによって強く型付けされるだけで、上記と同じです。Dictionary<string, string>
-
SortedList
- ソートされた一般的なリストです。どこに何を入れるかを考えなければならないので、挿入時に遅くなる。enum.であれば、検索時に場所を特定する必要がないので同じでしょうが、削除は普通のリストより遅くなります。
を使うことが多いのですが
List
と
Dictionary
一度ジェネリックで強く型付けしたものを使い始めると、標準の非ジェネリックに戻るのは本当に難しいです。
他にもいろいろなデータ構造があります。
KeyValuePair
を使うと、面白いことができます。
SortedDictionary
というのも便利です。
関連
-
[解決済み】"出力タイプがクラスライブラリのプロジェクトは直接起動できない"
-
[解決済み] [Solved] アセンブリ System.Web.Extensions dll はどこにありますか?
-
[解決済み] [Solved] 不正な文字列値: '\xEFxBFxBD' for column
-
[解決済み】MetadataException: 指定されたメタデータ・リソースをロードできない
-
[解決済み】2年前のMSDateを把握する【クローズド
-
[解決済み】URLから画像をダウンロードする方法
-
[解決済み】画像のペイントにTextureBrushを使用する方法
-
[解決済み】Pythonで、辞書、リスト、セットを使用する場合は?
-
[解決済み】Lookup()とDictionary(Of list())の違いについて)
-
[解決済み] IListを使用する場合とListを使用する場合について
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】プログラム実行中に1秒待つ
-
[解決済み] 保護レベルによりアクセス不能になりました。
-
[解決済み】Sequence contains no matching element(シーケンスにマッチする要素がない
-
[解決済み】クロススレッド操作が有効でない。作成されたスレッド以外のスレッドからアクセスされたコントロール
-
[解決済み】リソースの読み込みに失敗した:ステータス500(内部サーバーエラー)のサーバーの応答)
-
[解決済み】なぜこのコードはInvalidOperationExceptionを投げるのですか?
-
[解決済み】HRESULTからの例外:0x800A03ECエラー
-
[解決済み】スレッド終了またはアプリケーションの要求により、I/O操作が中断されました。
-
[解決済み】Nullableオブジェクトは値を持たなければならない?
-
[解決済み] C#の配列に値を追加する