forked from bchornii/DesignPatterns
-
Notifications
You must be signed in to change notification settings - Fork 0
PlumpMath/DesignPatterns-395
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
Перед использованием той или иной системной коллекции, необходимо ответить на следующие вопросы: Вопрос:Требуется ли использовать такой список, элементы которого сразу удаляются после получения их значения? Ответ: Если да, то имеет смысл рассмотреть возможность использования универсального класса Queue<T>, если требуется работа по принципу (FIFO) или универсального класса Stack<T>, если требуется работа по принципу (LIFO). Для безопасного доступа из нескольких потоков следует использовать параллельные версии очереди или стека - классы ConcurrentQueue<T> или ConcurrentStack<T> соответственно. Вопрос:Требуется ли получать доступ к элементам коллекции в определенном порядке (FIFO, LIFO) или в произвольным порядке? Ответ: Если да, то рекомендуется использовать класс Queue, универсальный класс Queue<T> или универсальный класс ConcurrentQueue<T>, которые предоставляют доступ по принципу FIFO. Класс Stack, универсальный класс Stack<T> или универсальный класс ConcurrentStack<T> предоставляют доступ по принципу LIFO. Универсальный класс LinkedList<T> предоставляет последовательный доступ от начала списка к концу списка или наоборот. Вопрос:Необходимо ли получать доступ к элементам коллекции по индексу? Ответ: Если да, то рекомендуется использовать классы ArrayList и StringCollection, и универсальный класс List<T>, которые предоставляют доступ к своим элементам по индексу, начиная отсчет с нулевого индекса. Классы Hashtable, SortedList, ListDictionary и StringDictionary, а также универсальные классы Dictionary<TKey, TValue> и SortedDictionary<TKey, TValue> предоставляют доступ к своим элементам по ключу. Классы NameObjectCollectionBase и NameValueCollection, а также универсальные классы KeyedCollection<TKey, TItem> и SortedList<TKey, TValue> предоставляют доступ к своим элементам по индексу с отсчетом от нуля или по ключу. Вопрос:Будет ли каждый элемент содержать только одно значение, сочетание из одного ключа и одного значения или сочетание из одного ключа и нескольких значений? Ответ: Одно значение. Можно использовать любую из коллекций, основанных на интерфейсе IList или на универсальном интерфейсе IList<T>.215 Один ключ и одно значение. Можно использовать любую из коллекций, основанных на интерфейсе IDictionary или на универсальном интерфейсе IDictionary<TKey, TValue>. Одно значение с внедренным ключом. Можно использовать универсальный класс KeyedCollection<TKey, TItem>. Один ключ и несколько значений. Можно использовать класс NameValueCollection. Вопрос:Требуется ли сортировка элементов в порядке, отличном от того порядка в котором элементы поступают (добавляются) в коллекцию? Ответ: Если да, то рекомендуется использовать класс Hashtable, который сортирует свои элементы по их хэш-коду. Класс SortedList и универсальные классы SortedDictionary<TKey, TValue> и SortedList<TKey, TValue> сортируют свои элементы по их ключам на основе реализации интерфейса IComparer и универсального интерфейса IComparer<T>. Класс ArrayList предоставляет метод Sort, который принимает реализацию IComparer в качестве параметра. Его универсальный аналог — универсальный класс List<T> предоставляет метод Sort, который принимает реализацию универсального интерфейса IComparer<T> в качестве параметра. Вопрос:Необходимо ли организовать быстрый поиск по коллекции, а также быстрое помещение новых элементов в коллекцию и быстрое извлечение существующих элементов из коллекции? Ответ: Если да, то рекомендуется использовать класс ListDictionary, так как он работает быстрее, чем Hashtable для небольших коллекций (10 элементов или меньше). Универсальный класс Dictionary<TKey, TValue> предоставляет более быстрый просмотр, чем универсальный класс SortedDictionary<TKey, TValue>. Многопоточной реализацией является класс ConcurrentDictionary<TKey, TValue>. Класс ConcurrentBag<T> предоставляет быструю многопоточную вставку для неупорядоченных данных. Вопрос:Требуется ли использовать коллекцию только для хранения строк? Ответ: Если да, то рекомендуется использовать классы StringCollection (основанный на IList) и StringDictionary (основанный на IDictionary) которые находятся в пространстве имен System.Collections.Specialized. Кроме того, можно использовать любой из универсальных классов коллекций из пространства имен System.Collections.Generic как строго типизированную строковую коллекцию, указав класс String в качестве параметра типа.
About
No description, website, or topics provided.
Resources
Stars
Watchers
Forks
Releases
No releases published
Packages 0
No packages published
Languages
- C# 100.0%