web-dev-qa-db-ja.com

.NETの配列には長さがあるのに、他のコレクション型には数があるのはなぜですか?

たとえばC#では、配列にはLengthプロパティがあります。ただし、リストなどの他のコレクション型にはCountプロパティがあります。これら2つが異なる理由はありますか?もしそうなら知りたいのですが。

23
Arunster

意味的にはかなり異なるため、これらの名前は異なります。

コレクションの数は、現在コレクションに格納されているアイテムの数であり、時間の経過とともに変化する可能性があります。

配列の長さは、それが保持できるアイテムの最大数であり(多くのアイテムを格納していない場合でも長さは10になります)、不変です。

例:

最大100個のボールを入れることができるバケットがある場合、その長さは100です。50個のボールを入れると、カウントは50になります。

ボールを10個追加すると、カウントは60になりますが、長さは100のままです。長さを変更するには、別のバケットを取得する必要があります。

内部では、アイテムサイズを乗じた容量に基づいてメモリの連続したブロック(長さ)を割り当てるため、おそらく配列はワード長を使用します。 Listクラスが同様の(変更可能ですが)概念に「容量」を使用するという事実は、配列が歴史的な理由で「長さ」という単語を使用する可能性があることを示唆しています。

30
combinatorics