Selecting a Collection Class 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Selecting a Collection Class



Be sure to choose your System.Collections class carefully. Using the wrong type can restrict your use of the collection.

Consider the following questions:

· Do you need a sequential list where the element is typically discarded after its value is retrieved?

· If yes, consider using the Queue class or the Queue<(Of <(T>)>) generic class if you need first-in-first-out (FIFO) behavior. Consider using the Stack class or the Stack<(Of <(T>)>) generic class if you need last-in-first-out (LIFO) behavior.

· If not, consider using the other collections.

· Do you need to access the elements in a certain order, such as FIFO, LIFO, or random?

· The Queue class and the Queue<(Of <(T>)>) generic class offer FIFO access.

· The Stack class and the Stack<(Of <(T>)>) generic class offer LIFO access.

· The LinkedList<(Of <(T>)>) generic class allows sequential access either from the head to the tail or from the tail to the head.

· The rest of the collections offer random access.

· Do you need to access each element by index?

· The ArrayList and StringCollection classes and the List<(Of <(T>)>) generic class offer access to their elements by the zero-based index of the element.

· The Hashtable, SortedList, ListDictionary, and StringDictionary classes, and the Dictionary<(Of <(TKey, TValue>)>) and SortedDictionary<(Of <(TKey, TValue>)>) generic classes offer access to their elements by the key of the element.

· The NameObjectCollectionBase and NameValueCollection classes, and the KeyedCollection<(Of <(TKey, TItem>)>) and SortedList<(Of <(TKey, TValue>)>) generic classes offer access to their elements by either the zero-based index or the key of the element.

 


Выбор класса коллекции

Необходимо тщательно выбирать ваш класс System.Collections. Использование неправильного типа может привести к ограничению возможностей использования коллекции.

Необходимо ответить на следующие вопросы:

· Нужен ли последовательный список, элемент которого обычно удаляется сразу после извлечения его значения?

· Если да, то рассмотрите возможность использования класса Queue или универсального класса Queue<(Of <(T>)>), если требуется поведение по принципу "первым поступил — первым обслужен" (FIFO). Рассмотрите возможность использования класса Stack или универсального класса Stack<(Of <(T>)>), если требуется поведение по принципу "последним поступил — первым обслужен" (LIFO).

· Если нет, то следует выбирать из остальных типов коллекций.

· Нужен ли доступ к элементам в определенном порядке (FIFO, LIFO) или в произвольным порядке?

· Класс Queue и универсальный класс Queue<(Of <(T>)>) предоставляют доступ по принципу FIFO.

· Класс Stack и универсальный класс Stack<(Of <(T>)>) предоставляют доступ по принципу LIFO.

· Универсальный класс LinkedList<(Of <(T>)>) предоставляет последовательный доступ от начала к концу списка или наоборот.

· Остальные коллекции предоставляют произвольный доступ.

· Необходимо ли иметь доступ к каждому элементу по индексу?

· Классы ArrayList и StringCollection, и универсальный класс List<(Of <(T>)>) предоставляют доступ к своим элементам по индексу с отсчетом от нуля.

· Классы Hashtable, SortedList, ListDictionary и StringDictionary, а также универсальные классы Dictionary<(Of <(TKey, TValue>)>) и SortedDictionary<(Of <(TKey, TValue>)>) предоставляют доступ к своим элементам по ключу.

· Классы NameObjectCollectionBase и NameValueCollection, а также универсальные классы KeyedCollection<(Of <(TKey, TItem>)>) и SortedList<(Of <(TKey, TValue>)>) предоставляют доступ к своим элементам по индексу с отсчетом от нуля или по ключу.

 


· Will each element contain one value, a combination of one key and one value, or a combination of one key and multiple values?

· One value: Use any of the collections based on the IList interface or the IList<(Of <(T>)>) generic interface.

· One key and one value: Use any of the collections based on the IDictionary interface or the IDictionary<(Of <(TKey, TValue>)>) generic interface.

· One value with embedded key: Use the KeyedCollection<(Of <(TKey, TItem>)>) generic class.

· One key and multiple values: Use the NameValueCollection class.

· Do you need to sort the elements differently from how they were entered?

· The Hashtable class sorts its elements by their hash codes.

· The SortedList class and the SortedDictionary<(Of <(TKey, TValue>)>) and SortedList<(Of <(TKey, TValue>)>) generic classes sort their elements by the key, based on implementations of the IComparer interface and the IComparer<(Of <(T>)>) generic interface.

· ArrayList provides a Sort method that takes an IComparer implementation as a parameter. Its generic counterpart, the List<(Of <(T>)>) generic class, provides a Sort method that takes an implementation of the IComparer<(Of <(T>)>) generic interface as a parameter.

· Do you need fast searches and retrieval of information?

· ListDictionary is faster than Hashtable for small collections (10 items or fewer). The Dictionary<(Of <(TKey, TValue>)>) generic class provides faster lookup than the SortedDictionary<(Of <(TKey, TValue>)>) generic class.

· Do you need collections that accept only strings?

· StringCollection (based on IList) and StringDictionary (based on IDictionary) are in the System.Collections.Specialized namespace.

· In addition, you can use any of the generic collection classes in the System.Collections.Generic namespace as strongly typed string collections by specifying the String class for their generic type arguments.

 


· Будет ли каждый элемент содержать только одно значение, сочетание из одного ключа и одного значения или сочетание из одного ключа и нескольких значений?

· Одно значение. Можно использовать любую из коллекций, основанных на интерфейсе IList или на универсальном интерфейсе IList<(Of <(T>)>).

· Один ключ и одно значение. Можно использовать любую из коллекций, основанных на интерфейсе IDictionary или на универсальном интерфейсе IDictionary<(Of <(TKey, TValue>)>).

· Одно значение с внедренным ключом. Можно использовать универсальный класс KeyedCollection<(Of <(TKey, TItem>)>).

· Один ключ и несколько значений. Можно использовать класс NameValueCollection.

· Нужна ли возможность отсортировать элементы в порядке, отличном от порядка их поступления?

· Класс Hashtable сортирует свои элементы по их хэш-коду.

· Класс SortedList и универсальные классы SortedDictionary<(Of <(TKey, TValue>)>) и SortedList<(Of <(TKey, TValue>)>) сортируют свои элементы по их ключам на основе реализации интерфейса IComparer и универсального интерфейса IComparer<(Of <(T>)>).

· ArrayList предоставляет метод Sort, который принимает реализацию IComparer в качестве параметра. Его универсальный аналог — универсальный класс List<(Of <(T>)>) предоставляет метод Sort, который принимает реализацию универсального интерфейса IComparer<(Of <(T>)>) в качестве параметра.

· Необходимы ли быстрый поиск и извлечение данных?

· ListDictionary быстрее, чем Hashtable для небольших коллекций (10 элементов или меньше). Универсальный класс Dictionary<(Of <(TKey, TValue>)>) предоставляет более быстрый просмотр, чем универсальный класс SortedDictionary<(Of <(TKey, TValue>)>).

· Нужна ли коллекция только для хранения строк?

· Классы StringCollection (основанный на IList) и StringDictionary (основанный на IDictionary) находятся в пространстве имен System.Collections.Specialized.

· Кроме того, можно использовать любой из универсальных классов коллекций в пространстве имен System.Collections.Generic как строго типизированную строковую коллекцию, указав класс String в качестве аргумента универсального типа.



Поделиться:


Последнее изменение этой страницы: 2017-01-19; просмотров: 95; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.222.138.230 (0.008 с.)