Dot-Net

為什麼沒有 Dictionary.TrimExcess()?

  • April 23, 2019

在 .NET 中,有一個建構子,Dictionary<TKey, TValue>它接受一個參數,int capacity. 這與許多其他集合相同,例如List<T>,Queue<T>Stack<T>; 此外,根據MSDN 文件

Dictionary 的容量是在需要調整大小之前可以添加到 Dictionary 的元素的數量。隨著元素被添加到字典中,容量會根據需要通過重新分配內部數組來自動增加。

在我看來,這與其他集合(如 等)幾乎相同List<T>。由於這些集合在必要時具有自動調整大小的行為,因此可能具有比所需更大的容量,因此它們中的大多數都具有一種TrimExcess方法。例如,如果您一次將未知數量的項目添加到集合中,並且之後您將不會添加任何其他項目,這將很方便。

為什麼沒有Dictionary<TKey, TValue>這個相同的TrimExcess方法?

(免責聲明:我非常熟悉“預設情況下不存在功能”的響應;我想我主要是想知道是否有特定原因導致TrimExcessfor aDictionary沒有意義,或者為什麼它會更難實現比更簡單的集合,如List。)

到 2019 年,.Net Standard 2.1+ 和 .Net Core 2.1+ 實現Dictionary<TKey, TValue>.TrimExcess()

請參閱:https ://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.dictionary-2.trimexcess?view=netstandard-2.1

.Net Framework 沒有在任何版本中實現它。

我猜在這種情況下,容量參數有助於定義散列函式以及儲存桶的數量;調整/修剪稀疏的數據集合需要重新計算所有剩餘儲存項目的雜湊值。

引用自:https://stackoverflow.com/questions/1625122