for(int i=0; i < 20; i++)

      lst.Add((char) ('a' + i));

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

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

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

    foreach(char с in lst)

      Console.Write(с + " ") ;

    Console.WriteLine("\n");

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

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

    Console.WriteLine("Изменить три первых элемента");

    lst[0] = 'X';

    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

Метод - Описание

Перейти на страницу:

Похожие книги