Словарь <TKey, TValue> .Values ​​- выделяет ли он новую память и временную сложность - PullRequest
0 голосов
/ 03 сентября 2018

Я новичок в C # и хочу понять, какова память и время, затрачиваемое на использование свойства Dictionary.Values. Здесь Я не смог найти ничего о спецификациях сложности времени алгоритма или сложности памяти? Я смотрю в неправильном месте или это не определено в C # спецификации?

P.S. Я пришел с C ++ BG.

Ответы [ 2 ]

0 голосов
/ 03 сентября 2018

Относительно сложности времени: словарь в значительной степени эквивалентен хэш-карте. Таким образом, чтение элемента может быть O (1). Для вставки элемента это зависит от ситуации (из-за возможного выделения памяти). Это либо O (1), либо O (n).

0 голосов
/ 03 сентября 2018

это не определено в C # spec?

Это не определено в спецификации C #, потому что это не функция C # - это деталь реализации фреймворка.

.Values лениво создается один раз при первом запросе; после этого раздается существующее значение. Так что да, некоторая память может быть выделена при первом использовании. Тем не менее, он не содержит снимок копии значений, так что это не дорогое распределение. Он просто содержит ссылку на экземпляр родительского словаря.

private Dictionary<TKey, TValue> dictionary;

буквально единственное поле в ValueCollection<TKey, TValue>. По сути, это фасад, который обеспечивает ценностно-ориентированное представление одних и тех же данных.

...