簡體   English   中英

為什么不堆棧 <T> 和隊列 <T> List時有Capacity屬性 <T> 呢?

[英]Why don't Stack<T> and Queue<T> have Capacity property while List<T> does?

Capacity屬性在List中比在Stack和Queue等其他集合中更有用嗎? 或者有另一種方法來獲得堆棧或隊列的容量?

我認為List具有Capacity屬性而StackQueue不是因為這些類型的正常使用是不同的。

對於List ,使用大量值來填充它是相當常見的,甚至在創建它之后的一段時間。 提供Capacity屬性(和構造函數參數)有助於減少在向列表中添加大量項目時要執行的重新分配的數量。

另一方面, StackQueue在創建不會立即添加大量項目。

據推測,微軟決定不值得添加Capacity屬性,因為它不會被大量使用。

但是,請注意Queue確實有一個允許您指定初始容量的構造函數, Stack也是如此

另請注意,這兩個類也有一個TrimExcess()方法,如下面的@drch所述。

所以微軟認為它在構建時會很有用,但以后沒用 - 所以他們只向構造函數添加了容量功能。

(順便提一下,我剛剛通過我們的代碼庫進行了快速檢查,似乎我們唯一一次使用List的容量實際上是在構建時。所以如果微軟現在正在設計List,它們也可能省略了Capacity列表屬性...)

StackQueue分別是LIFO和FIFO結構。

在這兩種情況下,您(作為API的使用者)通常只需要知道如何將數據放入結構中,以及如何再次獲取數據。 您不關心數據結構的長度,只關注pushpop

如果您因任何原因需要獲取容量(可能是有限的堆棧/隊列?)那么從最終用戶隱藏該詳細信息並實現您自己的堆棧/隊列結構可能更好。

Stack<T>Queue<T>不會公開此信息。 此信息甚至不會顯式存儲在這些類中,只能隱式地以內部數組的長度形式存儲。

獲得它的唯一選擇是使用反射來訪問數組並獲得它的長度。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM