Я считаю, что и Hashtable
, и Dictionary<TKey, TValue>
расширяются до следующего простого числа после удвоения текущего счетчика, например, От 31 до 67.
Насколько я понимаю, изменение размера не требует повторного вычисления хешей (поскольку они хранятся вместе с записями), но включает помещение каждой записи в ее новое ведение, где номер ячейки основан и хэш-код, и количество сегментов.
Вы спрашивали о List<T>
- там это действительно просто. Список поддерживается массивом, и вам просто нужно создать новый массив с нужным размером и скопировать содержимое текущего массива. Что-то вроде:
private void Resize(int newCapacity)
{
T[] tmp = new T[newCapacity];
Array.Copy(backingArray, tmp, backingArray.Length);
backingArray = tmp;
}