Треки
/
Java
Java
/
Вправи
/
Звʼязаний список
Звʼязаний список

Звʼязаний список

Середня

Вступ

Ми працюємо над проєктом з розробки системи розкладу потягів для завантаженої залізничної мережі.

Нас попросили розробити прототип маршрутів потягів для цієї системи розкладу. Кожен маршрут складається з послідовності станцій, на яких зупиняється відповідний потяг.

Вказівки

Наша команда вирішила використовувати двонаправлений звʼязаний список, щоб представити кожен маршрут потяга в розкладі. Кожну станцію на маршруті потяга представлятиме вузол у звʼязаному списку.

Нам не потрібно перейматися часом прибуття та відправлення на станціях. Кожну станцію просто представлятиме число.

Маршрути можна подовжувати, додаючи станції на початок або в кінець маршруту. Їх також можна скорочувати, прибираючи станції з початку або з кінця маршруту.

Іноді станцію закривають, і тоді її потрібно прибрати з маршруту, навіть якщо вона не на початку і не в кінці маршруту.

Розмір маршруту вимірюють не тим, яку відстань долає потяг, а тим, на скількох станціях він зупиняється.

Note

Звʼязаний список - фундаментальна структура даних у компʼютерних науках, яку часто використовують для реалізації інших структур даних. Як випливає з назви, це список вузлів, зʼєднаних між собою. Це список «вузлів», де кожен вузол посилається на свого сусіда або сусідів. У однонаправленому звʼязаному списку кожен вузол посилається лише на вузол, що йде за ним. У двонаправленому звʼязаному списку кожен вузол посилається і на вузол, що йде перед ним, і на вузол, що йде після нього.

Якщо хочеться глибше зануритися у звʼязані списки, погляньте на цю статтю, де все пояснено за допомогою гарних малюнків.

Реалізація

Ця вправа знайомить із дженериками. Щоб тести пройшли, нам потрібно побудувати свій клас так, щоб він приймав будь-який тип вхідних даних, наприклад Integer або String.

Дженерики корисні тим, що дають змогу писати загальніший код, який можна повторно використовувати. Реалізації List і Map у Java належать до класів, які використовують дженерики. Завдяки їм можна побудувати List, що містить Integers, або масив, що містить Strings, або будь-який інший тип.

На типи, які використовують у дженериках, накладається кілька обмежень. Одне з них полягає в тому, що щойно ми побудували List, який містить Integers, покласти в нього Strings уже не можна. Під час побудови класу треба вказати, який тип ми хочемо в нього помістити, і після цього цей екземпляр можна використовувати лише з цим типом.

Наприклад, можна створити масив Integers:

List<Integer> someList = new LinkedList<>();

Тепер someList може містити лише Integers. Можна також зробити так:

List<String> someOtherList = new LinkedList<>()

Тепер someOtherList може містити лише Strings.

Ще одне обмеження полягає в тому, що будь-який тип, який використовують із дженериками, не може бути примітивним типом, наприклад int або long. Утім, кожен примітивний тип має відповідний посилальний тип, тож замість int можна використовувати Integer, а замість long можна використовувати Long.

Щоб почати, може допомогти приклад використання дженериків.


Джерело

Класична тема з інформатики
Редагувати через GitHub Посилання відкривається в новому вікні або вкладці
Java Exercism

Час розпочати Звʼязаний список?

Зареєструйтеся на Exercism, щоб вивчати й опановувати Java, а також 26 концепцій158 вправ та справжнє наставництво від людей, і все це безкоштовно.