13

容量プロパティは、Stack や Queue などの他のコレクションよりも List の方が便利ですか? または、スタックまたはキューの容量を取得する別の方法はありますか?

4

3 に答える 3

5

プロパティがありList、ないのは、それらの型の通常の使用方法が異なるためだと思います。CapacityStackQueue

の場合、List作成されてからしばらくたってからでも、大量の値のセットを設定することはかなり一般的です。プロパティCapacity(およびコンストラクター引数) を指定すると、リストに多数のアイテムを追加するときに行われる再割り当ての回数を軽減するのに役立ちます。

Stack一方、作成Queueに一度に大量のアイテムが追加される傾向はありません。

Capacityおそらく Microsoft は、あまり使用されないため、このプロパティを追加する価値がないと判断したのでしょう。

ただし、 Queue には初期容量を指定できるコンストラクターがあり、Stack も同様であることに注意してください。

TrimExcess()また、以下の @drch で言及されているように、両方のクラスにもメソッドがあることに注意してください。

そのため、Microsoft は、構築時には有用であるが、後で有用ではないと考えました。そのため、容量機能をコンストラクターに追加しただけです。

(ちなみに、コード ベースを簡単に確認したところ、容量を使用するのListは実際には構築時のみのようです。したがって、Microsoft が現在 List を設計している場合、Capacityプロパティも省略される可能性があります。リスト...)

于 2013-06-27T08:50:34.913 に答える
3

Stackおよびは、Queueそれぞれ LIFO および FIFO 構造です。

どちらの場合も、(API のコンシューマーとして) 通常、データを構造体に入れる方法と、データを再び取り出す方法を知る必要があるだけです。データ構造の長さには関心がなく、 と だけに関心がpushありpopます。

何らかの理由で容量を取得する必要がある場合 (スタック/キューの制限など)、エンド ユーザーからその詳細を隠して、独自のスタック/キュー構造を実装することをお勧めします。

于 2013-06-27T08:39:04.867 に答える
2

Stack<T>この情報は、またはによって公開されませんQueue<T>。この情報は、それらのクラスに明示的に格納されることさえなく、内部配列の長さの形式で暗黙的にのみ格納されます。

それを取得する唯一のオプションは、リフレクションを使用して配列にアクセスし、その長さを取得することです。

于 2013-06-27T08:39:33.900 に答える