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
Читать дальше