Egy forgalmas vasúti hálózat menetrendtervező rendszerének fejlesztésén dolgozol.
Arra kértek, hogy prototípust készíts a menetrendtervező rendszer vonatútvonalaihoz. Minden útvonal azoknak a vasútállomásoknak a sorából áll, ahol az adott vonat megáll.
A csapatod úgy döntött, hogy a menetrendben szereplő minden vonatútvonalat kétszeresen láncolt listával ábrázol. A vonat útvonalán minden állomást egy-egy csomópont képvisel a láncolt listában.
Nem kell az állomások érkezési és indulási idejével foglalkoznod. Minden állomást egyszerűen egy szám ábrázol.
Az útvonalak bővíthetők: új állomásokat adhatsz az útvonal elejére vagy végére. Rövidíthetők is, ha eltávolítod az állomásokat az útvonal elejéről vagy végéről.
Néha bezárnak egy állomást, és ilyenkor el kell távolítani az útvonalról, akkor is, ha nem az útvonal elején vagy végén van.
Az útvonal hosszát nem az méri, hogy milyen messzire utazik a vonat, hanem az, hogy hány állomáson áll meg.
A láncolt lista alapvető adatszerkezet a számítástechnikában, és gyakran más adatszerkezetek megvalósításához használják. Ahogy a neve is sugallja, olyan csomópontok listája, amelyek össze vannak kapcsolva egymással. Olyan „csomópontok” listája, ahol minden csomópont a szomszédjához vagy a szomszédaihoz kapcsolódik. Egy egyszeresen láncolt listában minden csomópont csak az őt követő csomópontra mutat. Egy kétszeresen láncolt listában minden csomópont kapcsolódik az előtte lévő és az utána következő csomóponthoz is.
Ha mélyebbre szeretnél ásni a láncolt listák világában, nézd meg ezt a cikket, amely szép ábrák segítségével magyarázza el őket.
Ez a feladat a generikusokat mutatja be.
Ahhoz, hogy a tesztek sikeresek legyenek, úgy kell megírnod az osztályodat, hogy az bármilyen típusú bemenetet elfogadjon, például Integer-t vagy String-et.
A generikusok azért hasznosak, mert lehetővé teszik, hogy általánosabb és újrafelhasználhatóbb kódot írj.
A Java List és Map implementációi is olyan osztályok példái, amelyek generikusokat használnak.
Ha használod őket, létrehozhatsz egy Integers-t tartalmazó List-et, egy Strings-et tartalmazó listát vagy bármilyen más típusút.
A generikusokban használt típusokra néhány megkötés vonatkozik.
Az egyik, hogy miután létrehoztál egy Integers-t tartalmazó List-et, már nem tehetsz bele Strings-et.
Amikor létrehozod az osztályt, meg kell adnod, milyen típust szeretnél beletenni, és az a példány ezután már csak azzal a típussal használható.
Például létrehozhatsz egy Integers-ből álló listát:
List<Integer> someList = new LinkedList<>();
Most a someList már csak Integers-et tartalmazhat. Ezt is megteheted:
List<String> someOtherList = new LinkedList<>()
Most a someOtherList már csak Strings-et tartalmazhat.
Egy másik megkötés, hogy a generikusokkal használt típus nem lehet primitív típus, például int vagy long.
Viszont minden primitív típusnak van megfelelő referenciatípusa, így int helyett használhatod az Integer-t, long helyett pedig a Long-ot.
Sokat segíthet, ha megnézel egy példát a generikusok használatára, hogy elindulj.
Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) Java nyelvet 26 fogalom158 feladat segítségével, valódi emberi mentorálással, mindez ingyen.