Dot-Net
為什麼沒有 Dictionary.TrimExcess()?
在 .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():.Net Framework 沒有在任何版本中實現它。
我猜在這種情況下,容量參數有助於定義散列函式以及儲存桶的數量;調整/修剪稀疏的數據集合需要重新計算所有剩餘儲存項目的雜湊值。