2016-10-06 3 views
2

A Список имеет отдельные свойства для получения Count и его Capacity. Словари, как и все коллекции, также имеют свойство Count, и он имеет емкость, поскольку он содержит несколько constructors, которые позволяют вам указать его, и в документации к методу Add упоминается его. Тем не менее, я не вижу никакого способа запросить словарь, какова его текущая емкость.Как определить текущую емкость словаря C#?

Даже если нет возможности получить текущую емкость словаря, есть ли способ предсказать, когда произойдет перераспределение?

+1

связанные: http://stackoverflow.com/questions/2760931/initial-capacity- of-collection-types-eg-dictionary-list –

+1

Словарь работает по-разному, он использует ведра, которые будут содержать элементы с похожими хэш-кодами. – Maarten

+1

related: http://stackoverflow.com/a/24366862/261050 – Maarten

ответ

0

Словари не работают точно так же, как списки. Если вы изучите source code, предоставленный компанией Microsoft. Вы можете найти несколько частных полей, которые могут быть полезны.

Помните, что это инкапсулированная деталь реализации, вы не должны зависеть от нее в своем производственном коде как имена, поведение частных и внутренних членов может измениться без предварительного уведомления!

У вас есть внутренние массивы 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++; 
} 
Смежные вопросы