Коллекции

Содержание

Слайд 2

Введение в коллекции Козьминых Н.М. Коллекция в C# представляет собой совокупность

Введение в коллекции

Козьминых Н.М.

Коллекция в C# представляет собой совокупность объектов
Коллекции упрощают

решение многих задач программирования на основе структур данных
Коллекции предназначены для поддержки динамических массивов, связных списков, стеков, очередей и хеш-таблиц
Слайд 3

Обзор коллекций Козьминых Н.М. Необобщенные коллекции (System.Collections): динамический массив, стек, очередь,

Обзор коллекций

Козьминых Н.М.

Необобщенные коллекции (System.Collections): динамический массив, стек, очередь, словари. Коллекции

не типизированы, поскольку в них хранятся ссылки на данные типа object.
Специальные коллекции (System.Collections.Specialized): коллекции для символьных строк, специальные коллекции, в которых используется однонаправленный список.
Поразрядная коллекция (System.Collections) – BitArray, поддерживающая поразрядные операции.
Обобщенные коллекции (System.Collections.Generic): связные списки, стеки, очереди и словари. Коллекции являются типизированными в силу их обобщенного характера.
Параллельные коллекции (System.Collections.Concurrent)- поддерживают многопоточный доступ к коллекции.
Слайд 4

Необобщенные коллекции Козьминых Н.М. пространство имен System.Collections; структуры данных общего назначения,

Необобщенные коллекции

Козьминых Н.М.

пространство имен System.Collections;
структуры данных общего назначения, оперирующие ссылками на

объекты;
можно хранить разнотипные данные:
«+» позволяют манипулировать объектом любого типа, хотя и не типизированным способом;
«-» не обеспечивают типовую безопасность.
Слайд 5

Классы необобщенных коллекций Козьминых Н.М.

Классы необобщенных коллекций

Козьминых Н.М.

Слайд 6

Обобщенные коллекции Козьминых Н.М. пространство имен System.Collections.Generic; обобщенные коллекции типизированы; как

Обобщенные коллекции

Козьминых Н.М.

пространство имен System.Collections.Generic;
обобщенные коллекции типизированы;
как правило, классы обобщенных коллекций

являются не более чем обобщенными эквивалентами классов необобщенных коллекций, например, ArrayList → List, HashTable → Dictionary;
Слайд 7

Классы обобщенных коллекций Козьминых Н.М.

Классы обобщенных коллекций

Козьминых Н.М.

Слайд 8

Класс ArrayList Козьминых Н.М. поддерживаются динамические массивы, расширяющиеся и сокращающиеся по

Класс ArrayList

Козьминых Н.М.

поддерживаются динамические массивы, расширяющиеся и сокращающиеся по мере необходимости.
свойство

Count - количество объектов, хранящихся в коллекции на данный момент
некоторые часто используемые методы:
Слайд 9

Класс ArrayList - пример Козьминых Н.М. ArrayList arrLst = new ArrayList();

Класс ArrayList - пример

Козьминых Н.М.

ArrayList arrLst = new ArrayList();
arrLst.Add("11"); outputArrayList(arrLst);
arrLst.Add("44"); outputArrayList(arrLst);
arrLst.Add("33");

outputArrayList(arrLst);
arrLst.Insert(2, "55"); outputArrayList(arrLst);
arrLst.Add("44"); outputArrayList(arrLst);
arrLst.Remove("44"); outputArrayList(arrLst);
listBox3.Items.Add("find: " + arrLst.IndexOf("55"));
arrLst.Reverse(); outputArrayList(arrLst);
...
private void outputArrayList(ArrayList arrLst){
String ss = "";
foreach (String item in arrLst){
ss = ss + item + " , ";
}
listBox3.Items.Add(ss);
}
Слайд 10

Класс Hashtable Козьминых Н.М. информация сохраняется в хеш-таблице с помощью механизма

Класс Hashtable

Козьминых Н.М.

информация сохраняется в хеш-таблице с помощью механизма хеширования;
хеш-код служит

в качестве индекса, по которому в таблице хранятся искомые данные, соответствующие заданному ключу
Слайд 11

Класс Hashtable - пример Козьминых Н.М. Hashtable hashtable = new Hashtable();

Класс Hashtable - пример

Козьминых Н.М.

Hashtable hashtable = new Hashtable();
hashtable.Add("qwe", "111"); outputHashtable(hashtable);
hashtable.Add("zxc",

"222"); outputHashtable(hashtable);
hashtable.Add("asd", "666"); outputHashtable(hashtable);
...
private void outputHashtable(Hashtable arrLst){
String ss = "";
foreach (String item in arrLst.Keys){
ss = ss + item + " : " + arrLst[item] + " , ";
}
listBox6.Items.Add(ss);
ss = "";
foreach (String item in arrLst.Values){
ss = ss + item + " , ";
}
listBox6.Items.Add(ss);
}
Слайд 12

Стек: классы Stack и Stack Козьминых Н.М. контейнер, работающий по принципу

Стек: классы Stack и Stack

Козьминых Н.М.

контейнер, работающий по принципу "последний вошел,

первый вышел" (last in, first out — LIFO)
Слайд 13

Стек: классы Stack и Stack - пример Козьминых Н.М. Stack stack

Стек: классы Stack и Stack - пример

Козьминых Н.М.

Stack stack = new

Stack();
stack.Push("111"); outputStack(stack);
stack.Push("222"); outputStack(stack);
stack.Push("333"); outputStack(stack);
listBox5.Items.Add("Peek: " + stack.Peek());
outputStack(stack);
listBox5.Items.Add("Pop: " + stack.Pop());
outputStack(stack);

private void outputStack(Stack arrLst){
String ss = "";
foreach (String item in arrLst){
ss = ss + item + " , ";
}
listBox5.Items.Add(ss);
}
Слайд 14

Очередь: классы Queue и Queue Козьминых Н.М. коллекция, в которой элементы

Очередь: классы Queue и Queue

Козьминых Н.М.

коллекция, в которой элементы обрабатываются по

схеме "первый вошел, первый вышел" (first in, first out — FIFO)
Слайд 15

Связный список: класс LinkedList Козьминых Н.М. двухсвязный список, в котором каждый

Связный список: класс LinkedList

Козьминых Н.М.

двухсвязный список, в котором каждый элемент ссылается

на следующий и предыдущий
Слайд 16

Связный список: класс LinkedList - пример Козьминых Н.М. LinkedList lst =

Связный список: класс LinkedList - пример

Козьминых Н.М.

LinkedList lst = new LinkedList();
lst.AddFirst("111");

outputLinkedList(lst);
lst.AddLast("222"); outputLinkedList(lst);
lst.AddBefore(lst.Find("111"), "DDD");
outputLinkedList(lst);
lst.AddBefore(lst.Find("111"), "zzz");
outputLinkedList(lst);
listBox1.Items.Add("1: " + lst.ElementAt(1));
lst.Remove("DDD"); outputLinkedList(lst);

private void outputLinkedList(LinkedList lst){
String ss = "";
foreach (String item in lst){
ss = ss + item + " , ";
}
listBox1.Items.Add(ss);
}
Слайд 17

Сортированный список: класс SortedList Козьминых Н.М. коллекция, отсортированная по ключу

Сортированный список: класс SortedList

Козьминых Н.М.

коллекция, отсортированная по ключу

Слайд 18

Сортированный список: класс SortedList - пример Козьминых Н.М. SortedList sortedList =

Сортированный список: класс SortedList - пример

Козьминых Н.М.

SortedList sortedList = new

SortedList();
sortedList.Add("qwe", "111"); outputSortedList(sortedList);
sortedList.Add("asd", "333"); outputSortedList(sortedList);
sortedList.Add("zxc", "222"); outputSortedList(sortedList);
private void outputSortedList(SortedList arrLst){
String ss = "";
foreach (String item in arrLst.Keys){
ss = ss + item + " : " + arrLst[item] + " , ";
}
listBox4.Items.Add(ss);
ss = "";
foreach (String item in arrLst.Values){
ss = ss + item + " , ";
}
listBox4.Items.Add(ss);
}
Слайд 19

Пример Козьминых Н.М. SortedList list = new SortedList (); private void

Пример

Козьминых Н.М.

SortedList list = new SortedList();
private void output()

{
StringBuilder result = new StringBuilder();
foreach (string key in list.Keys)
result.Append(key + ": " + list[key] + ", ");
listBox.Items.Add(result.ToString());
}
Слайд 20

Пример (продолжение) Козьминых Н.М. private void btnAdd_Click(object sender, EventArgs e) {

Пример (продолжение)

Козьминых Н.М.

private void btnAdd_Click(object sender, EventArgs e) {
if

(txtKey.Text == "") {
MessageBox.Show("Укажите ключ"); return;
}
if (txtValue.Text == "") {
MessageBox.Show("Укажите значение"); return;
}
if (list.ContainsKey(txtKey.Text)) {
MessageBox.Show("Указанный ключ уже существует"); return;
}
list.Add(txtKey.Text, txtValue.Text);
output();
}
private void btnDelete_Click(object sender, EventArgs e) {
if (!list.ContainsKey(txtKey.Text)) {
MessageBox.Show("Указанного ключа уже существует"); return;
}
list.Remove(txtKey.Text);
output();
}
Слайд 21

Словарь: класс Dictionary Козьминых Н.М. сложная структура данных, позволяющая обеспечить доступ

Словарь: класс Dictionary

Козьминых Н.М.

сложная структура данных, позволяющая обеспечить доступ к

элементам по ключу;
главное свойство словарей — быстрый поиск на основе ключей.
Слайд 22

Словарь: класс Dictionary - пример Козьминых Н.М. Dictionary dict = new

Словарь: класс Dictionary - пример

Козьминых Н.М.

Dictionary dict = new

Dictionary();
dict.Add("qwe", "111"); outputDictionary(dict);
dict.Add("asd", "666"); outputDictionary(dict);
dict.Add("zxc", "444"); outputDictionary(dict);

private void outputDictionary(Dictionary arrLst){
String ss = "";
foreach (String item in arrLst.Keys){
ss = ss + item + " : " + arrLst[item] + " , ";
}
listBox7.Items.Add(ss);
ss = "";
foreach (String item in arrLst.Values){
ss = ss + item + " , ";
}
listBox7.Items.Add(ss);
}
Слайд 23

Множества: классы HashSet и SortedSet Козьминых Н.М. коллекция, содержащаяся только отличающиеся элементы

Множества: классы HashSet и SortedSet

Козьминых Н.М.

коллекция, содержащаяся только отличающиеся элементы

Слайд 24

Множества: классы HashSet и SortedSet - пример Козьминых Н.М. SortedSet sSortSet

Множества: классы HashSet и SortedSet - пример

Козьминых Н.М.

SortedSet sSortSet = new

SortedSet();
sSortSet.Add("111"); outputSortedSet(sSortSet);
sSortSet.Add("555"); outputSortedSet(sSortSet);
sSortSet.Add("222"); outputSortedSet(sSortSet);
SortedSet sSortSet2 = new SortedSet();
sSortSet2.Add("111");
listBox2.Items.Add( sSortSet2.IsSubsetOf(sSortSet));
outputSortedSet(sSortSet);

private void outputSortedSet(SortedSet sSortSet){
String ss = "";
foreach (String item in sSortSet){
ss = ss + item + " , ";
}
listBox2.Items.Add(ss);
}