Добавить в цитаты Настройки чтения

Страница 462 из 502

<b>    lst.Remove('А');</b>

<b>    Console.WriteLine(&quot;Количество элементов: &quot; + lst.Count);</b>

<b>    // Отобразить содержимое динамического массива, используя цикл foreach.</b>

<b>    Console.Write(&quot;Содержимое: &quot;);</b>

<b>    foreach(char с in lst)</b>

<b>      Console.Write(с + &quot; &quot;);</b>

<b>    Console.WriteLine(&quot;n&quot;);</b>

<b>    Console.WriteLine(&quot;Добавить еще 20 элементов&quot;);</b>

<b>    // Добавить количество элементов, достаточное для</b>

<b>    // принудительного расширения массива,</b>

<b>    for(int i=0; i &lt; 20; i++)</b>

<b>      lst.Add((char) ('a' + i));</b>

<b>    Console.WriteLine(&quot;Текущая емкость: &quot; + lst.Capacity);</b>

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

<b>    Console.Write(&quot;Содержимое: &quot;);</b>

<b>    foreach(char с in lst)</b>

<b>      Console.Write(с + &quot; &quot;) ;</b>

<b>    Console.WriteLine(&quot;n&quot;);</b>

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

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

<b>    Console.WriteLine(&quot;Изменить три первых элемента&quot;);</b>

<b>    lst[0] = 'X';</b>

<b>    lst[1] = 'Y' ;</b>

<b>    lst[2] = 'Z';</b>

<b>    Console.Write(&quot;Содержимое: &quot;);</b>

<b>    foreach(char с in lst)</b>

<b>      Console.Write(с + &quot; &quot;);</b>

<b>    Console.WriteLine();</b>

<b>    // Следующая строка кода недопустима из-за</b>

<b>    // нарушения безопасности обобщенного типа.</b>

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

<b>  }</b>

<b>}</b>

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

<b>Исходное количество элементов: 0</b>

<b>Добавить 6 элементов</b>

<b>Количество элементов: 6</b>

<b>Текущее содержимое: С А Е В D F</b>

<b>Удалить 2 элемента</b>

<b>Количество элементов: 4</b>

<b>Содержимое: С Е В D</b>

<b>Добавить еще 20 элементов</b>

<b>Текущая емкость: 32</b>

<b>Количество элементов после добавления 20 новых: 24</b>

<b>Содержимое: С Е В D a b c d e f g h i j k l m n o p q r s t</b>

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

<b>Содержимое: X Y Z D a b c d e f g h i j k l m n o p q r s t</b>

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

<b>public LinkedListO</b>

<b>public LinkedList(IEnumerable&lt;T&gt; collection)</b>

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

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

<b>public LinkedListNode&lt;T&gt; Next { get; }</b>

<b>public LinkedListNode&lt;T&gt; Previous { get; }</b>

<b>public LinkedList&lt;T&gt; List { get; }</b>

<b>public T Value { get; set; }</b>

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