Главная страница

программирование. Руководство su P# a n Reference в herbert schildt полное руководство с 0 герберт шилдт


Скачать 3.32 Mb.
НазваниеРуководство su P# a n Reference в herbert schildt полное руководство с 0 герберт шилдт
Анкорпрограммирование
Дата25.01.2022
Размер3.32 Mb.
Формат файлаrtf
Имя файлаc-40-polnoe-rukovodstvo-2011.rtf
ТипРуководство
#341448
страница87 из 97
1   ...   83   84   85   86   87   88   89   90   ...   97

public
int BinarySearch(T
Выполняет поиск в вызывающей коллекции значе
item,
IComparer comparer)
ния, задаваемого параметром item , используя для сравнения указанный способ, определяемый параметром comparer. Возвращает индекс совпавшего элемента. Если искомое значение не найдено, возвращается отрицательное значение. Вызывающий список должен быть отсортирован
public
int BinarySearch(int
Выполняет поиск в вызывающей коллекции значе
index,
int count, T item,
ния, задаваемого параметром item , используя для
IComparer comparer)
сравнения указанный способ, определяемый параметром comparer. Поиск начинается с элемента, указываемого по индексу index, и включает количество элементов, определяемых параметром count. Метод возвращает индекс совпавшего элемента. Если искомое значение не найдено, возвращается отрицательное значение. Вызывающий список должен быть отсортирован
public
List GetRange(int
Возвращает часть вызывающей коллекции. Часть
index,
int count)
возвращаемой коллекции начинается с элемента, указываемого по индексу index , и включает количество элементов, задаваемое параметром count. Возвращаемый объект ссылается на те же элементы, что и вызывающий объект
public
int IndexOf(T item)
Возвращает индекс первого вхождения элемента item в вызывающей коллекции. Если искомый элемент не обнаружен, возвращается значение ‑1
public
void InsertRange(int
Вставляет элементы коллекции collection в вы
index,
IEnumerable
зывающую коллекцию, начиная с элемента, указы
collection)
ваемого по индексу index
public i tern)
int LastlndexOf(T
Возвращает индекс последнего вхождения элемента item в вызывающей коллекции. Если искомый элемент не обнаружен, возвращается значение ‑1
public
void RemoveRange(int
Удаляет часть вызывающей коллекции, начиная с
index,
int count)
элемента, указываемого по индексу index , и включая количество элементов, определяемое параметром count
public
void Reverse()
Располагает элементы вызывающей коллекции в обратном порядке
public
void Reverse(int
Располагает в обратном порядке часть вызываю
index,
int count)
щей коллекции, начиная с элемента, указываемого по индексу index , и включая количество элементов, определяемое параметром count
public
void Sort()
Сортирует вызывающую коллекцию по нарастающей
Окончание табл. 25.15
Метод
Описание
public void
Сортирует вызывающую коллекцию, используя
Sort(IComparer comparer)
для сравнения способ, задаваемый параметром comparer. Если параметр comparer имеет пустое значение, то для сравнения используется способ, выбираемый по умолчанию
public void
Сортирует вызывающую коллекцию, используя для
Sort(Comparison comparison)
сравнения указанный делегат
public void Sort(int index,
Сортирует вызывающую коллекцию, используя
int count , IComparer
для сравнения способ, задаваемый параметром
comparer)
comparer. Сортировка начинается с элемента, указываемого по индексу index , и включает количество элементов, определяемых параметром count. Если параметр comparer имеет пустое значение, то для сравнения используется способ, выбираемый по умолчанию
public T [ ] ToArrayO
Возвращает массив, содержащий копии элементов вызывающего объекта
public void TrimExcess()
Сокращает емкость вызывающей коллекции таким образом, чтобы она не превышала 10% от количества элементов, хранящихся в ней на данный момент
В классе List определяется также собственное свойство Capacity, помимо тех, что уже объявлены в интерфейсах, которые в нем реализуются. Это свойство объявляется следующим образом.

public int Capacity { get; set; }

Свойство Capacity позволяет установить и получить емкость вызывающей коллекции в качестве динамического массива. Эта емкость равна количеству элементов, которые может содержать коллекция до ее вынужденного расширения. Такая коллекция расширяется автоматически, и поэтому задавать ее емкость вручную необязательно. Но из соображений эффективности это иногда можно сделать, если заранее известно количество элементов коллекции. Благодаря этому исключаются издержки на выделение дополнительной памяти.

В классе List реализуется также приведенный ниже индексатор, определенный в интерфейсе IList.

public Т this[int index] { get; set; }

С помощью этого индексатора устанавливается и получается значение элемента коллекции, указываемое по индексу index.

В приведенном ниже примере программы демонстрируется применение класса List. Это измененный вариант примера, демонстрировавшего ранее класс ArrayList. Единственное изменение, которое потребовалось для этого, заключалось в замене класса ArrayList классом List, а также в использовании параметров обобщенного типа.

// Продемонстрировать применение класса List. using System;

using System.Collections.Generic;

class GenListDemo { static void Main() {

// Создать коллекцию в виде динамического массива.

List 1st = new List();

Console.WriteLine("Исходное количество элементов: " + lst.Count);

Console.WriteLine();

Console.WriteLine("Добавить 6 элементов");

// Добавить элементы в динамический массив.

1st.Add('С');

1st.Add(1А *);

1st.Add('Е');

1st.Add(1В1);

1st.Add('D');

1st.Add('F');

Console.WriteLine("Количество элементов: " + lst.Count);

// Отобразить содержимое динамического массива,

// используя индексирование массива.

Console.Write("Текущее содержимое: "); for (int i=0; i < lst.Count;. i++)

Console.Write(1st[i] + " ");

Console.WriteLine("\n");

Console.WriteLine("Удалить 2 элемента ");

// Удалить элементы из динамического массива.

1st.Remove('F');

1st.Remove('А1);

Console.WriteLine("Количество элементов: " + lst.Count);

// Отобразить содержимое динамического массива, используя цикл foreach. Console.Write("Содержимое: "); foreach(char с in 1st)

Console.Write(с + " ");

Console.WriteLine("\n");

Console.WriteLine("Добавить еще 20 элементов");

// Добавить количество элементов, достаточное для // принудительного расширения массива, for(int i=0; i < 20; i++)

1st.Add((char) ('a1 + i));

Console.WriteLine("Текущая емкость: " + 1st.Capacity);

Console.WriteLine("Количество элементов после добавления 20 новых: " + 1st.Count);

Console.Write("Содержимое: ");

foreach(char с in 1st)

Console.Write(с + " ") ;

Console.WriteLine("\n");

// Изменить содержимое динамического массива,

//’ используя индексирование массива.

Console.WriteLine("Изменить три первых элемента"); 1st [0] = 1X'; lst[l] = ' Y' ;

1st[2] = 1Z1;

Console.Write("Содержимое: "); foreach(char с in 1st)

Console.Write(с + " ");

Console.WriteLine ();

// Следующая строка кода недопустима из‑за // нарушения безопасности обобщенного типа.

// lst.Add(99); // Ошибка, поскольку это не тип char!

}

}

Эта версия программы дает такой же результат, как и предыдущая.

Исходное количество элементов: О

Добавить 6 элементов Количество элементов: 6 Текущее содержимое: С А Е В D F

Удалить 2 элемента Количество элементов: 4 Содержимое: С Е В D

Добавить еще 20 элементов Текущая емкость: 32

Количество элементов после добавления 20 новых: 24 Содержимое: CEBDabcdefghij klmnopqrst

Изменить три первых элемента

Содержимое: XYZDabcdefghij klmnopqrst

Класс LinkedList

В классе LinkedList создается коллекция в виде обобщенного двунаправленного списка. В этом классе реализуются интерфейсы ICollection, ICollection, IEnumerable, IEnumerable, ISerializable и IDeserializationCallback. В двух последних интерфейсах поддерживается сериализация списка. В классе LinkedList определяются два приведенных ниже открытых конструктора.

public LinkedListO

public LinkedList(IEnumerable collection)

В первом конструкторе создается пустой связный список, а во втором конструкторе – список, инициализируемый элементами из коллекции collection.

Как и в большинстве других реализаций связных списков, в классе LinkedList инкапсулируются значения, хранящиеся в узлах списка, где находятся также ссылки на предыдущие и последующие элементы списка. Эти узлы представляют собой объекты класса LinkedListNode. В классе LinkedListNode предоставляются четыре следующих свойства.

public LinkedListNode Next { get; } public LinkedListNode Previous { get; } public LinkedList List { get; } public T Value { get; set; }

С помощью свойств Next и Previous получаются ссылки на предыдущий и последующий узлы списка соответственно, что дает возможность обходить список в обоих направлениях. Если же предыдущий или последующий узел отсутствует, то возвращается пустая ссылка. Для получения ссылки на сам список служит свойство List. А с помощью свойства Value можно устанавливать и получать значение, находящееся в узле списка.

В классе LinkedList определяется немало методов. В табл. 25.16 приведены наиболее часто используемые методы данного класса. Кроме того, в классе LinkedList определяются собственные свойства, помимо тех, что уже объявлены в интерфейсах, которые в нем реализуются. Эти свойства приведены ниже.

public LinkedListNode First { get; } public LinkedListNode Last { get; }

С помощью свойства First получается первый узел в списке, а с помощью свойства Last – последний узел в списке.

Таблица 25.16. Наиболее часто используемые методы, определенные в классе LinkedList
Метод
Описание
public LinkedListNode
Добавляет в список узел со значением value не
AddAfter(LinkedListNode
посредственно после указанного узла node. Указы
node , T value)
ваемый узел node не должен быть пустым (null). Метод возвращает ссылку на узел, содержащий значение value
public void
Добавляет в список новый узел newNode непо
AddAfter(LinkedListNode
средственно после указанного узла node. Ука
node, LinkedListNode
зываемый узел node не должен быть пустым
newNode)
(null). Если узел node отсутствует в списке или если новый узел newNode является частью другого списка, то* генерируется исключение

InvalidOperationException
public LinkedListNode
Добавляет в список узел со значением value непо
AddBefore(LinkedListNode
средственно перед указанным узлом node. Указы
node, T value)
ваемый узел node не должен быть пустым (null). Метод возвращает ссылку на узел, содержащий значение value
Окончание табл. 25.16
Метод
Описание
public void
Добавляет в список новый узел newNode не
AddBefore(LinkedListNode
посредственно перед указанным узлом node.
node , LinkedListNode
Указываемый узел node не должен быть пу
newNode)
стым (null). Если узел node отсутствует в списке или если новый узел newNode является частью другого списка, то генерируется исключение

InvalidOperationException
public LinkedList
Добавляет узел со значением value в начало спи
AddFirst(T value)
ска. Метод возвращает ссылку на узел, содержащий значение value
public void
Добавляет узел node в начало списка. Если узел
AddFirst(LinkedListNode
node является частью другого списка, то генериру
node)
ется исключение InvalidOperationException
public LinkedList
Добавляет узел со значением value в конец спи
AddLast(T value)
ска. Метод возвращает ссылку на узел, содержащий значение value
public void
Добавляет узел node в конец списка. Если узел
AddLast(LinkedListNode node)
node является частью другого списка, то генериру
ется исключение InvalidOperationException
public LinkedList
Find(T
Возвращает ссылку на первый узел в списке, име
value)
ющий значение value. Если искомое значение value отсутствует в списке, то возвращается пустое значение
public LinkedList
Возвращает ссылку на последний узел в списке,
FindLast(T value)
имеющий значение value. Если искомое значение value отсутствует в списке, то возвращается пустое значение
public bool Remove(T
value)
Удаляет из списка первый узел, содержащий значение value. Возвращает логическое значение true, если узел удален, т.е. если узел со значением value обнаружен в списке и удален; в противном случае возвращает логическое значение false
public void
Удаляет из списка узел, соответствующий ука
Remove(LinkedList
node)
занному узлу node. Если узел node отсутствует в списке, то генерируется исключение

InvalidOperationException
public void RemoveFirst()
Удаляет из списка первый узел
public void RemoveLast()
Удаляет из списка последний узел
В приведенном ниже примере программы демонстрируется применение класса

LinkedList.

// Продемонстрировать применение класса LinkedList. using System;

using System.Collections.Generic;

class GenLinkedListDemo { static void Main() {

// Создать связный список.

LinkedList 11 = new LinkedList();

Console.WriteLine("Исходное количество элементов в списке: " + 11.Count) Console.WriteLine ();

Console.WriteLine("Добавить в список 5 элементов");

// Добавить элементы в связный список.

11.AddFirst('А');

11.AddFirst('В');

11.AddFirst('С') ;

11.AddFirst(' D') ;

11.AddFirst('Е *);

Console.WriteLine("Количество элементов в списке: " + 11.Count);

// Отобразить связный список, обойдя его вручную.

LinkedListNode node;

Console.Write("Отобразить содержимое списка по ссылкам: "); for(node = 11.First; node != null; node = node.Next)

Console.Write(node.Value + " ") ;

Console.WriteLine("\n") ;

// Отобразить связный список, обойдя его в цикле foreach.

Console.Write("Отобразить содержимое списка в цикле foreach: "); foreach(char ch in 11)

Console.Write(ch + " ");

Console.WriteLine("\n");

// Отобразить связный список, обойдя его вручную в обратном направлении. Console.Write("Следовать по ссылкам в обратном направлении: "); for(node = 11.Last; node != null; node = node.Previous)

Console.Write(node.Value + " ");

Console.WriteLine ("\n");

// Удалить из списка два элемента.

Console.WriteLine("Удалить 2 элемента из списка");

// Удалить элементы из связного списка.

11.Remove(1С1);

11.Remove('А');

Console.WriteLine("Количество элементов в списке: " + 11.Count);

// Отобразить содержимое видоизмененного списка в цикле foreach.

Console.Write("Содержимое списка после удаления элементов: "); foreach(char ch in 11)

Console.Write(ch + " ");

Console.WriteLine ("\n");

// Добавить три элемента в конец списка.

11.AddLast('X');
1   ...   83   84   85   86   87   88   89   90   ...   97


написать администратору сайта