Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторная 8. Коллекции в java.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
279.3 Кб
Скачать

Класс LinkedList и его методы

Коллекция представляет двунаправленный список.

Объявление списка имеет вид:

LinkedList<тип входящего объекта> имя =

new LinkedList< тип входящего объекта>();

У класса имеются свойства

Count - Число элементов, которое фактически содержится в коллекции.

First - Первый узел списка

Last - Последний узел списка

Полезные методы класса LinkedList перечислены в табл.

Некоторые методы класса LinkedList Таблица

Метод

Описание

AddAfter(существующий узел коллекции, объект)

Добавляет объект после существующего узла коллекции

AddAfter(существующий узел коллекции, новый узел)

Добавляет указанный новый узел после указанного существующего узла в коллекцию

AddBefore(существующий узел коллекции, объект)

Добавляет объект перед существующим узлом коллекции

AddBefore(существующий узел коллекции, новый узел)

Добавляет указанный новый перед существующим узлом коллекции

AddFirst(объект)

Добавляет объект в начало коллекции

AddLast(объект)

Добавляет объект в конец коллекции

Clear()

Удаляет все элементы из коллекции

bool Contains(элемент)

Определяет, входит ли элемент в состав коллекции

bool Exists(метод)

Определяет, содержит ли коллекция элементы, удовлетворяющие условиям указанного метода, который в качестве параметра должен иметь объект того класса, который помещен в коллекцию

Узел с найденным значением Find(объект - значение)

Выполняет поиск объекта, совпадающего с искомым значением, начиная с начала коллекции, и возвращает узел с найденным значением или null

Узел с найденным значением FindLast(объект - значение)

Выполняет поиск объекта, совпадающего с искомым значением, начиная с конца коллекции, и возвращает узел с найденным значением или null

bool Remove(узел)

Удаляет первое вхождение указанного узла из коллекции

bool RemoveFirst()

Удаляет первый элемент из коллекции

bool RemoveLast()

Удаляет последний элемент из коллекции

Класс LinkedListNode представляет узел в LinkedList. Его свойства:

Next – следующий узел в списке

Previous – предыдущий узел в списке

Value – возвращает значение узла

В следующем примере кода показаны различные методы класса LinkedList.

using System;

using System.Text;

using System.Collections.Generic;

public class Example

{ public static void Main()

{ // Создание списка

string[] words =

{ "the", "fox", "jumped", "over", "the", "dog" };

LinkedList<string> sentence = new LinkedList<string>(words);

Display(sentence, "Элементы списка:");

Console.WriteLine("sentence.Contains(\"jumped\") = {0}",

sentence.Contains("jumped"));

// Добавление слова 'today' в начало списка

sentence.AddFirst("today");

Display(sentence, "Тест 1: Добавлено 'today' в начало списка:");

// Перемещение первого узла в конец списка

LinkedListNode<string> mark1 = sentence.First;

sentence.RemoveFirst();

sentence.AddLast(mark1);

Display(sentence, "Тест 2: Первый узел перемещен в конец списка:");

// Изменение последнего узла на 'yesterday'.

sentence.RemoveLast();

sentence.AddLast("yesterday");

Display(sentence, "Тест 3: Последний узел изменен на 'yesterday':");

// Перемещение последнего узла в начало

mark1 = sentence.Last;

sentence.RemoveLast();

sentence.AddFirst(mark1);

Display(sentence, "Тест 4: Последний узел перемещен в начало:");

// Указать последнее вхождение элемента 'the'.

sentence.RemoveFirst();

LinkedListNode<string> current = sentence.FindLast("the");

IndicateNode(current, "Тест 5: Указать последнее вхождение слова 'the':");

// Добавить 'lazy' и 'old' после 'the' (Узел LinkedListNode назван current).

sentence.AddAfter(current, "old");

sentence.AddAfter(current, "lazy");

IndicateNode(current, "Test 6: Add 'lazy' and 'old' after 'the':");

// Найти узел 'fox'.

current = sentence.Find("fox");

IndicateNode(current, "Тест 7: Найти узел 'fox':");

// Добавить 'quick' и 'brown' перед 'fox':

sentence.AddBefore(current, "quick");

sentence.AddBefore(current, "brown");

IndicateNode(current, "Тест 8: Добавлены 'quick'и 'brown' перед 'fox':");

// Сохранить ссылку на текущий узел 'fox',

// и на предыдущий узел в списке. Найти узел 'dog'.

mark1 = current;

LinkedListNode<string> mark2 = current.Previous;

current = sentence.Find("dog");

IndicateNode(current, "Test 9: Indicate the 'dog' node:");

// Метод AddBefore вызывает исключениеnvalidOperationException

// при попытке добавить узел, уже принадлежащий списку.

Console.WriteLine("Тест 10: Появление исключения при добавлении узла (fox), уже существующего в списке already in the list:");

try

{

sentence.AddBefore(current, mark1);

}

catch (InvalidOperationException ex)

{

Console.WriteLine("Сообщение исключения: {0}", ex.Message);

}

Console.WriteLine();

// Удаление узла, на который ссылается mark1, и затем добавление его

// перед узлом, на который ссылается current.

// Поиск узла, на который ссылается current.

sentence.Remove(mark1);

sentence.AddBefore(current, mark1);

IndicateNode(current, "Тест 11: Узел, на который ссылается mark1 (fox) //перед текущим узлом (dog):");

// Удаление узла, на который ссылается current.

sentence.Remove(current);

IndicateNode(current, "Тест 12: Удален узел (dog) и попытка найти его:");

// Add the node after the node referred to by mark2.

sentence.AddAfter(mark2, current);

IndicateNode(current, "Test 13: Add node removed in test 11 after a referenced node (brown):");

// The Remove method finds and removes the

// first node that that has the specified value.

sentence.Remove("old");

Display(sentence, "Test 14: Remove node that has the value 'old':");

// Удаление всех узлов.

sentence.Clear();

Console.WriteLine();

Console.WriteLine("Тест 15: Список пуст. Проверка, принадлежит ли списку 'jumped' = {0}",

sentence.Contains("jumped"));

Console.ReadLine();

}

private static void Display(LinkedList<string> words, string test)

{

Console.WriteLine(test);

foreach (string word in words)

{

Console.Write(word + " ");

}

Console.WriteLine();

Console.WriteLine();

}

private static void IndicateNode(LinkedListNode<string> node, string test)

{

Console.WriteLine(test);

if (node.List == null)

{

Console.WriteLine("Узел '{0}' не принадлежит списку\n",

node.Value);

return; }

StringBuilder result = new StringBuilder("(" + node.Value + ")");

LinkedListNode<string> nodeP = node.Previous;

while (nodeP != null)

{

result.Insert(0, nodeP.Value + " ");

nodeP = nodeP.Previous;

}

node = node.Next;

while (node != null)

{

result.Append(" " + node.Value);

node = node.Next;

}

Console.WriteLine(result);

Console.WriteLine();

}

}