容量プロパティは、Stack や Queue などの他のコレクションよりも List の方が便利ですか? または、スタックまたはキューの容量を取得する別の方法はありますか?
3 に答える
プロパティがありList
、ないのは、それらの型の通常の使用方法が異なるためだと思います。Capacity
Stack
Queue
の場合、List
作成されてからしばらくたってからでも、大量の値のセットを設定することはかなり一般的です。プロパティCapacity
(およびコンストラクター引数) を指定すると、リストに多数のアイテムを追加するときに行われる再割り当ての回数を軽減するのに役立ちます。
Stack
一方、作成後Queue
に一度に大量のアイテムが追加される傾向はありません。
Capacity
おそらく Microsoft は、あまり使用されないため、このプロパティを追加する価値がないと判断したのでしょう。
ただし、 Queue には初期容量を指定できるコンストラクターがあり、Stack も同様であることに注意してください。
TrimExcess()
また、以下の @drch で言及されているように、両方のクラスにもメソッドがあることに注意してください。
そのため、Microsoft は、構築時には有用であるが、後で有用ではないと考えました。そのため、容量機能をコンストラクターに追加しただけです。
(ちなみに、コード ベースを簡単に確認したところ、容量を使用するのList
は実際には構築時のみのようです。したがって、Microsoft が現在 List を設計している場合、Capacity
プロパティも省略される可能性があります。リスト...)
Stack
およびは、Queue
それぞれ LIFO および FIFO 構造です。
どちらの場合も、(API のコンシューマーとして) 通常、データを構造体に入れる方法と、データを再び取り出す方法を知る必要があるだけです。データ構造の長さには関心がなく、 と だけに関心がpush
ありpop
ます。
何らかの理由で容量を取得する必要がある場合 (スタック/キューの制限など)、エンド ユーザーからその詳細を隠して、独自のスタック/キュー構造を実装することをお勧めします。
Stack<T>
この情報は、またはによって公開されませんQueue<T>
。この情報は、それらのクラスに明示的に格納されることさえなく、内部配列の長さの形式で暗黙的にのみ格納されます。
それを取得する唯一のオプションは、リフレクションを使用して配列にアクセスし、その長さを取得することです。