Array
List
Dictionary
HashSet
Stack
Queue
SortedList
LinkedList
<br>
<br>
Что общего между коллекциями
- Все элементы внутри коллекции одного типа
- Key/index уникальный
- Поиск по value (значению) производится перебором каждого элемента в коллекции.
- Если в качестве value или key выступает ссылочный тип и нам нужно найти какой-то определенный элемент в списке, то при поиске сравнение будет происходить по адресу в памяти (по ссылке)
### Array (Массив)
- Фиксированная длина (Длину нельзя изменить, только создать массив с бОльшей длиной и перенести туда элементы)
- В качестве индекса используется тип int
.png)
### List (Список)
- То же самое, что и Array, только динамическая длина. Можно указать длину списка, но если вместимости не хватит, то автоматически будет добавлено еще необходимое количество.
- При переборе списка с помощью foreach, внутри цикла коллекцию нельзя модифицировать. Цикла for это не касается. Решением будет создание копии списка (дописать к списку .ToList() и будет возвращена копия)
### Dictionary (Словарь)
- В качестве key может использоваться любой тип
Если в качестве key будет использоваться НЕ базовый тип, то для корректного поиска по key нужно переопределить два метода GetHashCode() и Equals(). Если этого не сделать, то по умолчанию два ссылочных типа сравниваются между собой по адресу в памяти (ссылке). Тем самым сравнение по значению НЕ будет работать.
Key должен быть уникальным. Если в Dictionary попадает второй одинаковый key, генерируется исключение.
Поиск по key происходит следующим образом.
Сначала ищется совпадение по hash
Если совпадений несколько, то найденные экземпляры перебираются по Equals();
Если по Equals() несколько совпадений, то вызывается исключение.
### HashSet
То же самое, что и Dictionary, только без значения (value), есть только (key).
Полезен, если нужно часто проверять наличие элементов в большом списке.
[Источник](https://highload.today/hashset/)
### LinkedList
Отличия от обычного List
- Нет ключа. Нельзя обратиться напрямую к элементу (нет индексатора), только перебором всей коллекции.
- Быстрое удаление элемента (главное преимущество)
### Другие виды коллекций
Для экономии времени отложил расписывание. Когда понадобятся, тогда и распишем.