Πόσο ασφαλές είναι να προσεγγίσετε ένα στοιχείο σε HashMap μέσω ενός κλειδιού που δεν υπάρχει;
sobes.tech AI
Απάντηση από AI
Όταν προσεγγίζετε ένα στοιχείο σε HashMap με ένα μη υπάρχον κλειδί, η μέθοδος get() επιστρέφει null. Αυτό είναι ασφαλές με την έννοια ότι δεν θα προκληθεί εξαίρεση τύπου IndexOutOfBoundsException, όπως θα συνέβαινε, για παράδειγμα, με έναν πίνακα ή μια λίστα κατά την πρόσβαση σε λανθασμένο δείκτη.
Ωστόσο, εάν ο επόμενος κώδικας υποθέτει ότι το αποτέλεσμα που λαμβάνεται δεν θα είναι null (π.χ. κατά την κλήση μεθόδων σε αυτό το αντικείμενο), αυτό μπορεί να οδηγήσει σε NullPointerException.
Για ασφαλή λειτουργία, συνιστάται:
-
Να ελέγχετε το αποτέλεσμα για
nullπριν το χρησιμοποιήσετε:// Παράδειγμα ελέγχου για null Object value = hashMap.get(nonExistentKey); if (value != null) { // Χρησιμοποιήστε το value } else { // Διαχειριστείτε την περίπτωση απουσίας του κλειδιού } -
Να χρησιμοποιείτε μεθόδους που παρέχουν μια προεπιλεγμένη τιμή ή πιο ασφαλή συμπεριφορά, όπως το
getOrDefault()(διαθέσιμο από την Java 8):// Παράδειγμα χρήσης του getOrDefault Object value = hashMap.getOrDefault(nonExistentKey, defaultValue); -
Να χρησιμοποιείτε τη δομή
Optional(με Java 8), αν αυτό είναι κατάλληλο, για να δηλώσετε πιο ρητά την πιθανή απουσία τιμής:// Παράδειγμα χρήσης του Optional Optional<Object> optionalValue = Optional.ofNullable(hashMap.get(nonExistentKey)); if (optionalValue.isPresent()) { // Χρησιμοποιήστε την τιμή: optionalValue.get() }
Έτσι, η άμεση πρόσβαση με get() είναι ασφαλής, αλλά η εργασία με μια τιμή null χωρίς την κατάλληλη επαλήθευση μπορεί να προκαλέσει NullPointerException.