Вы находитесь на странице: 1из 71

Онлайн-образование

Меня хорошо видно && слышно?


Ставьте + , если все хорошо
Напишите в чат, если есть проблемы

2
Включил камеру - спас лекцию!

3
Не забыть включить запись!

4
Особенности встроенных
коллекций
фото Ягур Алексей
Тимлид в YouDo
Aleksey Yagur
5
Тестирование
(http://bit.ly/2019-11-18-test)

6
Выбор статуса по завершению теста

http://bit.ly/2019-11-18-test

Пройден тест и есть возможность писать код

Пройден тест, но код писать не могу

Не могу сейчас ни пройти тест, ни писать код

7
Типы для
коллекций
8
Типы для коллекций

Интерфейсы

Готовые к использованию
классы

Базовые классы
9
Интерфейсы

Какой интерфейс является самым


базовым для коллекций?

10
Интерфейсы

● IEnumerator
● IEnumerable
● ICollection
● IList
● IDictionary
11
● ICloneable
Интерфейсы

12
Интерфейсы

13
Интерфейсы

14
Интерфейсы

15
Пространства имён

1 System.Collections

2 System.Collections.Specialized

3 System.Collections.Generic

4 System.Collections.ObjectModel

5 System.Collections.Concurrent

16
6 System.Collections.Immutable
Массив

17
Так ли прост массив?

★ System/Array.cs ➔ Реализует:
★ 3084 строки ◆ IEnumerable
★ 6 доп.классов ◆ ICollection
★ 2 структуры ◆ ICloneable
◆ IList
★ 44 метода
◆ IStructuralComparable
(без учёта перегрузок)
◆ IStructuralEquatable

18
Классы и структуры массива

SorterObjectArray
FunctorComparer<T>

SorterGenericArray
SZArrayEnumerator
ArrayEnumerator

SZArrayHelper
+SZGenericArrayEnumerator<T>

19
EmptyArray<T>
Массив

Можно ли массиву сделать Resize?

20
Методы массива

● BinarySearch
● Resize
● IndexOf, LastIndex
● Find, FindLast, FindAll
● FindIndex, FindLastIndex
● Exists, TrueForAll
21
SZ-массив (Single-dimensional, Zero-based)

22
Двумерный массив

23
Зубчатый массив - 1

24
Зубчатый массив - 2

25
Массив: Идём против системы

26
Общее устройство массива в памяти

Индекс блока синхронизации

Ссылка на таблицу виртуальных


методов

Общая длина массива

Ссылка на тип
(для ссылочных элементов)

Элементы массива

27
Общее устройство массива в памяти

Индекс блока синхронизации

Ссылка на таблицу виртуальных


методов

Общая длина массива

Длины по каждому измерению


массива (искл. SZArray)

Нижние индексы по каждому


измерению массива (искл. SZArray)

Элементы массива

28
Пространства имён

29
Пространства имён

1 System.Collections

2 System.Collections.Specialized

3 System.Collections.Generic

4 System.Collections.ObjectModel

5 System.Collections.Concurrent

30
6 System.Collections.Immutable
System.Collections

● Stack
● BitArray
● Hashtable
● Queue
● ArrayList
31
● SortedList
Stack

32
BitArray

33
Hashtable

● Расширение идёт по простым


числам (>2*текущий размер)
● После 100 коллизий смена хеш-
34
функции и перерасчёт хешей
Queue

35
ArrayList

● Расширение идёт удвоением (=2*текущий размер)


● Использует Array.BinarySearch
36
SortedList

● Расширение идёт удвоением


(=2*текущий размер)
● Использует Array.BinarySearch
● В качестве индекса вставки
37
использует ~i
Проблемы

38
Boxing (упаковка) /Unboxing
(распаковка)
- процесс преобразования переменной из типа по значению в ссылочный.

39
Boxing (упаковка) /Unboxing
(распаковка)
Упаковка:
1. Выделяется память под новый объект в управляемой памяти
2. Значение из переменной копируется в память нового объекта
3. Возвращается адрес объекта

Распаковка:
1. Проверка на null, выбрасывание NullReferenceException, если null
2. Проверка на совпадение типов, выбрасывание
InvalidCastException, если не совпали
3. Копирование значения переменной
4. Неиспользуемый объект в управляемой памяти удаляется
Сборщиком мусора
40
Boxing (упаковка) /Unboxing
(распаковка)

41
Пространства имён

1 System.Collections

2 System.Collections.Specialized

3 System.Collections.Generic

4 System.Collections.ObjectModel

5 System.Collections.Concurrent

42
6 System.Collections.Immutable
System.Collections.Specialized

● BitVector32
● StringCollection
● ListDictionary
● HybridDictionary
43
BitVector32

● Использует uint как хранилище


● Инициализируется только при создании
● Имеет красивый ToString()
44
StringCollection

● Использует ArrayList как хранилище


● Не позволяет добавлять не-строки
● Возвращает только строки
45
ListDictionary

● Использует односвязный список


● При количестве элементов больше 10 становится
невыгодным из-за обхода всех элементов - O(n)
46
ListDictionary

47
HybridDictionary

48
Пространства имён

1 System.Collections

2 System.Collections.Specialized

3 System.Collections.Generic

4 System.Collections.ObjectModel

5 System.Collections.Concurrent

49
6 System.Collections.Immutable
System.Collections.Generic

● Dictionary<TKey, TValue>
● LinkedList<T>
● List<T>
● Queue<T>
● SortedDictionary<TKey, TValue>
● SortedSet<T>
● Stack<T>
50
Пространства имён

1 System.Collections

2 System.Collections.Specialized

3 System.Collections.Generic

4 System.Collections.ObjectModel

5 System.Collections.Concurrent

51
6 System.Collections.Immutable
System.Collections.ObjectModel

● ObservableCollection<T>

● ReadOnlyObservableCollection<T>

52
Пространства имён

1 System.Collections

2 System.Collections.Specialized

3 System.Collections.Generic

4 System.Collections.ObjectModel

5 System.Collections.Concurrent

53
6 System.Collections.Immutable
System.Collections.Concurrent

● BlockingCollection<T>
● ConcurrentBag<T>
● ConcurrentDictionary<TKey,TValue>
● ConcurrentQueue<T>
● ConcurrentStack<T>
54
Пространства имён

1 System.Collections

2 System.Collections.Specialized

3 System.Collections.Generic

4 System.Collections.ObjectModel

5 System.Collections.Concurrent

55
6 System.Collections.Immutable
System.Collections.Immutable

● ImmutableArray<T>
● ImmutableDictionary<TKey,TValue>
● ImmutableHashSet<T>
● ImmutableList<T>
● ImmutableQueue<T>
● ImmutableSortedDictionary<TKey,TValue>
● ImmutableSortedSet<T>
● ImmutableStack<T>
56
Резюме
57
Интерфейсы

58
Так ли прост массив?

★ System/Array.cs ➔ Реализует:
★ 3084 строки ◆ IEnumerable
★ 6 доп.классов ◆ ICollection
★ 2 структуры ◆ ICloneable
◆ IList
★ 44 метода
◆ IStructuralComparable
(без учёта перегрузок)
◆ IStructuralEquatable

59
Общее устройство массива в памяти

Индекс блока синхронизации

Ссылка на таблицу виртуальных


методов

Общая длина массива

Ссылка на тип
(для ссылочных элементов)

Элементы массива

60
Общее устройство массива в памяти

Индекс блока синхронизации

Ссылка на таблицу виртуальных


методов

Общая длина массива

Длины по каждому измерению


массива (искл. SZArray)

Нижние индексы по каждому


измерению массива (искл. SZArray)

Элементы массива

61
Boxing (упаковка) /Unboxing
(распаковка)
- процесс преобразования переменной из типа по значению в ссылочный.

62
Пространства имён

1 System.Collections

2 System.Collections.Specialized

3 System.Collections.Generic

4 System.Collections.ObjectModel

5 System.Collections.Concurrent

63
6 System.Collections.Immutable
System.Collections

● Stack
● BitArray
● Hashtable
● Queue
● ArrayList
64
● SortedList
System.Collections.Specialized

● BitVector32
● StringCollection
● HybridDictionary
● ListDictionary
65
System.Collections.Generic

● Dictionary<TKey, TValue>
● LinkedList<T>
● List<T>
● Queue<T>
● SortedDictionary<TKey, TValue>
● SortedSet<T>
● Stack<T>
66
System.Collections.Concurrent

● BlockingCollection<T>
● ConcurrentBag<T>
● ConcurrentDictionary<TKey,TValue>
● ConcurrentQueue<T>
● ConcurrentStack<T>
67
System.Collections.Immutable

● ImmutableArray<T>
● ImmutableDictionary<TKey,TValue>
● ImmutableHashSet<T>
● ImmutableList<T>
● ImmutableQueue<T>
● ImmutableSortedDictionary<TKey,TValue>
● ImmutableSortedSet<T>
● ImmutableStack<T>
68
Тестирование
(http://bit.ly/2019-11-18-test2)

69
Заполните, пожалуйста,
опрос о занятии по ссылке в чате

70
Ответы на вопросы
фото Ягур Алексей
Тимлид в YouDo
Aleksey Yagur
71

Вам также может понравиться