Страницы

Поиск по вопросам

воскресенье, 8 декабря 2019 г.

Зачем нужен List<T>, если HashSet<T> лучше?

#c_sharp


Стал замечать, что приходится менять тип коллекции с List на HashSet для улучшения
производительности. Ну и собственно теперь кажется, что лучше я сразу буду делать HashSet-ы,
везде где раньше привык делать List-ы. Или всё-таки есть ситуации, когда List предпочтительнее?
    


Ответы

Ответ 1



List - упорядоченная коллекция, которая может содержать дубликаты. HashSet - неупорядоченная коллекция, без дубликатов. Одно из неудобств - нужно реализовывать GetHashCode для элементов. Не всегда нужно и возможно использовать HashSet. Хотя в случаях когда его получится использовать, будет весомый прирост производительности на больших коллекциях, так как некоторые операции выполняются быстрее (например Contains, Remove, Add выполняются за O(1)).

Ответ 2



Все зависит от конкретной ситуации. Если заглянуть на MSDN, то там написано следующее: The HashSet class provides high-performance set operations. A set is a collection that contains no duplicate elements, and whose elements are in no particular order. Класс HashSet предоставляет высокопроизводительные операции над множеством(набором). Множество(набор) - это коллекция элементов, которые не дублируются и не упорядочены. ... HashSet implements the IReadOnlyCollection interface starting with the .NET Framework 4.6; in previous versions of the .NET Framework, the HashSet class did not implement this interface. Начиная с версии .NET Framework 4.6, класс HashSet реализует интерфейс IReadOnlyCollection. В предыдущих версиях .NET Framework-а, этот класс не реализовывал этот интерфейс. ... A HashSet collection is not sorted and cannot contain duplicate elements. If order or element duplication is more important than performance for your application, consider using the List class together with the Sort method. Коллекция HashSet является неупорядоченной и не может содержать дубликаты. В случаях, когда наличие дубликатов или порядок элементов является более важным в вашем приложении, чем производительность, то рассмотрите возможность использования класса List вместе с методом Sort.

Комментариев нет:

Отправить комментарий