Sobes.tech
Junior

Πόσο ασφαλές είναι να προσεγγίσετε ένα στοιχείο σε 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.