lst[1] = 'Y' ;
lst[2] = 'Z';
Console.Write("Содержимое: ");
foreach(char с in lst)
Console.Write(с + " ");
Console.WriteLine();
// Следующая строка кода недопустима из-за
// нарушения безопасности обобщенного типа.
// lst.Add(99); // Ошибка, поскольку это не тип char!
}
}
Эта версия программы дает такой же результат, как и предыдущая.
Исходное количество элементов: 0
Добавить 6 элементов
Количество элементов: 6
Текущее содержимое: С А Е В D F
Удалить 2 элемента
Количество элементов: 4
Содержимое: С Е В D
Добавить еще 20 элементов
Текущая емкость: 32
Количество элементов после добавления 20 новых: 24
Содержимое: С Е В D a b c d e f g h i j k l m n o p q r s t
Изменить три первых элемента
Содержимое: X Y Z D a b c d e f g h i j k l m n o p q r s t
Класс 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 AddAfter(LinkedListNode node , T value) - Добавляет в список узел со значением value непосредственно после указанного узла node. Указываемый узел node не должен быть пустым (null).Метод возвращает ссылку на узел, содержащий значение value
public void AddAfter(LinkedListNode node, LinkedListNode newNode) - Добавляет в список новый узел newNode непо
средственно после указанного узла node. Указываемый узел node не должен быть пустым (null).Если узел node отсутствует в списке или если новый узел newNode является частью другого списка, то* генерируется исключение InvalidOperationException
public LinkedListNode AddBefore(LinkedListNode node, T value) - Добавляет в список узел со значением value непо
средственно перед указанным узлом node. Указываемый узел node не должен быть пустым (null).Метод возвращает ссылку на узел, содержащий значение value
public void AddBefore(LinkedListNode node , LinkedListNode newNode) - Добавляет в список новый узел newNode не
посредственно перед указанным узлом node. Указываемый узел node не должен быть пустым (null).Если узел node отсутствует в списке или если новый узел newNode является частью другого списка, то генерируется исключение InvalidOperationException
Читать дальше