программирование. Руководство su P# a n Reference в herbert schildt полное руководство с 0 герберт шилдт
Скачать 3.32 Mb.
|
public int BinarySearch(T Выполняет поиск в вызывающей коллекции значе item, IComparer ния, задаваемого параметром item , используя для сравнения указанный способ, определяемый параметром comparer. Возвращает индекс совпавшего элемента. Если искомое значение не найдено, возвращается отрицательное значение. Вызывающий список должен быть отсортирован public int BinarySearch(int Выполняет поиск в вызывающей коллекции значе index, int count, T item, ния, задаваемого параметром item , используя для IComparer сравнения указанный способ, определяемый параметром comparer. Поиск начинается с элемента, указываемого по индексу index, и включает количество элементов, определяемых параметром count. Метод возвращает индекс совпавшего элемента. Если искомое значение не найдено, возвращается отрицательное значение. Вызывающий список должен быть отсортирован public List Возвращает часть вызывающей коллекции. Часть 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 имеет пустое значение, то для сравнения используется способ, выбираемый по умолчанию public void Сортирует вызывающую коллекцию, используя для Sort(Comparison сравнения указанный делегат public void Sort(int index, Сортирует вызывающую коллекцию, используя int count , IComparer для сравнения способ, задаваемый параметром comparer) comparer. Сортировка начинается с элемента, указываемого по индексу index , и включает количество элементов, определяемых параметром count. Если параметр comparer имеет пустое значение, то для сравнения используется способ, выбираемый по умолчанию public T [ ] ToArrayO Возвращает массив, содержащий копии элементов вызывающего объекта public void TrimExcess() Сокращает емкость вызывающей коллекции таким образом, чтобы она не превышала 10% от количества элементов, хранящихся в ней на данный момент В классе List public int Capacity { get; set; } Свойство Capacity позволяет установить и получить емкость вызывающей коллекции в качестве динамического массива. Эта емкость равна количеству элементов, которые может содержать коллекция до ее вынужденного расширения. Такая коллекция расширяется автоматически, и поэтому задавать ее емкость вручную необязательно. Но из соображений эффективности это иногда можно сделать, если заранее известно количество элементов коллекции. Благодаря этому исключаются издержки на выделение дополнительной памяти. В классе List public Т this[int index] { get; set; } С помощью этого индексатора устанавливается и получается значение элемента коллекции, указываемое по индексу index. В приведенном ниже примере программы демонстрируется применение класса List // Продемонстрировать применение класса List using System.Collections.Generic; class GenListDemo { static void Main() { // Создать коллекцию в виде динамического массива. 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 public LinkedListO public LinkedList(IEnumerable В первом конструкторе создается пустой связный список, а во втором конструкторе – список, инициализируемый элементами из коллекции collection. Как и в большинстве других реализаций связных списков, в классе LinkedList public LinkedListNode С помощью свойств Next и Previous получаются ссылки на предыдущий и последующий узлы списка соответственно, что дает возможность обходить список в обоих направлениях. Если же предыдущий или последующий узел отсутствует, то возвращается пустая ссылка. Для получения ссылки на сам список служит свойство List. А с помощью свойства Value можно устанавливать и получать значение, находящееся в узле списка. В классе LinkedList public LinkedListNode С помощью свойства 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.Collections.Generic; class GenLinkedListDemo { static void Main() { // Создать связный список. 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 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'); |