Stai lavorando a un progetto per sviluppare un sistema di pianificazione dei treni per una rete ferroviaria molto trafficata.
Ti è stato chiesto di sviluppare un prototipo per le tratte dei treni del sistema di pianificazione. Ogni tratta è composta da una sequenza di stazioni ferroviarie in cui un determinato treno fa fermata.
Il tuo team ha deciso di usare una lista doppiamente concatenata per rappresentare ogni percorso ferroviario dell'orario. Ogni stazione lungo il percorso del treno sarà rappresentata da un nodo della lista concatenata.
Non devi preoccuparti degli orari di arrivo e di partenza alle stazioni. Ogni stazione sarà semplicemente rappresentata da un numero.
I percorsi possono essere estesi, aggiungendo stazioni all'inizio o alla fine di un percorso. Si possono anche accorciare rimuovendo stazioni dall'inizio o dalla fine di un percorso.
A volte una stazione viene chiusa, e in quel caso va rimossa dal percorso, anche se non si trova all'inizio o alla fine.
La dimensione di un percorso non si misura in base a quanto lontano viaggia il treno, ma in base a quante stazioni tocca.
La lista concatenata è una struttura dati fondamentale dell'informatica, spesso usata per implementare altre strutture dati. Come suggerisce il nome, è una lista di nodi collegati tra loro. È una lista di «nodi», in cui ogni nodo è collegato al suo vicino o ai suoi vicini. In una lista semplicemente concatenata ogni nodo è collegato solo al nodo che lo segue. In una lista doppiamente concatenata ogni nodo è collegato sia al nodo che viene prima sia a quello che viene dopo.
Se vuoi approfondire le liste concatenate, dai un'occhiata a questo articolo, che le spiega con dei bei disegni.
Questo esercizio introduce i generics.
Per far passare i test devi costruire la tua classe in modo che accetti qualsiasi tipo di input, ad esempio Integer o String.
I generics sono utili perché ti permettono di scrivere codice più generale e riutilizzabile.
Le implementazioni Java di List e Map sono entrambe esempi di classi che usano i generics.
Usandoli puoi costruire una List che contiene Integers o una lista che contiene Strings o qualsiasi altro tipo.
Ci sono alcuni vincoli sui tipi usati nei generics.
Uno di questi è che, una volta costruita una List che contiene Integers, non puoi inserirvi Strings.
Devi specificare quale tipo vuoi mettere nella classe quando la costruisci, e quell'istanza potrà poi essere usata solo con quel tipo.
Ad esempio, potresti costruire una lista di Integers:
List<Integer> someList = new LinkedList<>();
Ora someList può contenere solo Integers. Potresti anche fare:
List<String> someOtherList = new LinkedList<>()
Ora someOtherList può contenere solo Strings.
Un altro vincolo è che qualsiasi tipo usato con i generics non può essere un tipo primitivo, come int o long.
Tuttavia, ogni tipo primitivo ha un corrispondente tipo di riferimento, quindi al posto di int puoi usare Integer e al posto di long puoi usare Long.
Può essere utile dare un'occhiata a un esempio di caso d'uso dei generics per iniziare.
Iscriviti a Exercism per imparare e padroneggiare Java con 26 concetti158 esercizi e il mentoring di persone reali, tutto gratis.