Как определить текущую емкость словаря C#?
Список имеет отдельные свойства для полученияграфа и егоемкости . Словари, как и все коллекции, также имеют свойствоCount , и оно имеет емкость, потому что оно имеет несколькоконструкторов , которые позволяют вам указать его, и документация для методаAdd упоминает его. Однако я не вижу никакого способа узнать у словаря, какова его текущая емкость.
Даже если нет способа получить текущий словарь емкость, есть ли способ предсказать, когда может произойти перераспределение?
1 ответ:
Словари работают не совсем так, как списки. Если вы изучите исходный код , предоставленный корпорацией Майкрософт. Вы можете найти несколько частных полей, которые могут быть полезны.
Имейте в виду, что это инкапсулированная деталь реализации, вы не должны зависеть от нее в своем производственном коде, поскольку имена, поведение частных и внутренних членов могут измениться без предварительного уведомления!
У вас есть внутренние массивы
int[] buckets
иEntry[] entries
. У вас также естьint freeList
иint freeCount
. Вы можете использовать отражение, чтобы поиграй вокруг них.Чтобы ответить на ваш вопрос, да перераспределение запускается на каждой вставке и вот фактический код:
int index; if (freeCount > 0) { index = freeList; freeList = entries[index].next; freeCount--; } else { if (count == entries.Length) { Resize(); targetBucket = hashCode % buckets.Length; } index = count; count++; }