Δουλεύεις σε ένα έργο για την ανάπτυξη ενός συστήματος προγραμματισμού δρομολογίων για ένα πολυσύχναστο σιδηροδρομικό δίκτυο.
Σου ζητήθηκε να αναπτύξεις ένα πρωτότυπο για τα δρομολόγια των τρένων στο σύστημα προγραμματισμού. Κάθε δρομολόγιο αποτελείται από μια ακολουθία σιδηροδρομικών σταθμών στους οποίους σταματάει ένα δεδομένο τρένο.
Η ομάδα σου έχει αποφασίσει να χρησιμοποιήσει μια διπλά συνδεδεμένη λίστα για να αναπαραστήσει κάθε διαδρομή τρένου στο πρόγραμμα δρομολογίων. Κάθε σταθμός κατά μήκος της διαδρομής του τρένου θα αναπαρίσταται από έναν κόμβο στη συνδεδεμένη λίστα.
Δεν χρειάζεται να ανησυχείς για τις ώρες άφιξης και αναχώρησης στους σταθμούς. Κάθε σταθμός θα αναπαρίσταται απλώς από έναν αριθμό.
Οι διαδρομές μπορούν να επεκταθούν, προσθέτοντας σταθμούς στην αρχή ή στο τέλος μιας διαδρομής. Μπορούν επίσης να συντομευτούν, αφαιρώντας σταθμούς από την αρχή ή το τέλος μιας διαδρομής.
Μερικές φορές ένας σταθμός κλείνει, και σε αυτή την περίπτωση ο σταθμός πρέπει να αφαιρεθεί από τη διαδρομή, ακόμα κι αν δεν βρίσκεται στην αρχή ή στο τέλος της διαδρομής.
Το μέγεθος μιας διαδρομής δεν μετριέται από το πόσο μακριά ταξιδεύει το τρένο, αλλά από το σε πόσους σταθμούς σταματάει.
Η συνδεδεμένη λίστα είναι μια θεμελιώδης δομή δεδομένων στην επιστήμη των υπολογιστών, που χρησιμοποιείται συχνά στην υλοποίηση άλλων δομών δεδομένων. Όπως υποδηλώνει το όνομά της, είναι μια λίστα με κόμβους που συνδέονται μεταξύ τους. Είναι μια λίστα με "κόμβους", όπου κάθε κόμβος συνδέεται με τον γείτονά του ή τους γείτονές του. Σε μια απλά συνδεδεμένη λίστα κάθε κόμβος συνδέεται μόνο με τον κόμβο που τον ακολουθεί. Σε μια διπλά συνδεδεμένη λίστα κάθε κόμβος συνδέεται τόσο με τον κόμβο που προηγείται όσο και με τον κόμβο που ακολουθεί.
Αν θέλεις να εμβαθύνεις στις συνδεδεμένες λίστες, ρίξε μια ματιά σε αυτό το άρθρο που τις εξηγεί με ωραία σχέδια.
Αυτή η άσκηση σου παρουσιάζει τους γενικούς τύπους.
Για να περάσουν τα tests, πρέπει να φτιάξεις την κλάση σου έτσι ώστε να δέχεται οποιονδήποτε τύπο δεδομένων, για παράδειγμα 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.
Μπορεί να σε βοηθήσει να ρίξεις μια ματιά σε ένα παράδειγμα χρήσης γενικών τύπων για να ξεκινήσεις.
Γράψου στο Exercism για να μάθεις και να κατακτήσεις Java με 26 έννοιες158 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.