Visualizzazione dei risultati da 1 a 5 su 5

Discussione: dubbio su reference

Hybrid View

  1. #1

    dubbio su reference

    ciao,
    mi è venuto un dubbio su come i reference siano considerati durante la fase di esecuzione. mi spiego: se io inserisco un reference in una hashmap come chiave, cosa devo fare per fare in modo di ottenerne un altro esattamente uguale? devo usare una stringa?

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Puoi spiegarti meglio? Magari con un esempio?
    Non riesco a capire quale sia il tuo problema e cosa c'entrino le stringhe...


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    in pratica vorrei sapere come vengono confrontati due reference all interno di un hashmap, e se si può impostare il modo in cui vengono confrontati

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    HashMap rappresenta una mappa di coppie (Chiave -> Valore) indicizzate sulla chiave.
    Di conseguenza, in questa mappa non vi possono essere due chiavi uguali. L'uguaglianza, in questo contesto, è determinata in modo "naturale" secondo il classico confronto fra oggetti e l'indicizzazione avviene tramite hashCode.

    Un oggetto A è uguale ad un oggetto B se A.equals(B) ritorna true (e viceversa).
    Quindi, chi decide l'uguaglianza è il programmatore quando ridefinisce il metodo equals() (ti rimando alla documentazione della classe Object).

    Il metodo equals(), inoltre, ha un contratto molto stretto con il metodo hashCode(). Di conseguenza, quando si ridefinisce il metodo equals() per una classe generalmente si dovrebbe ridefinire coerentemente anche il metodo hashCode().
    Questo è scritto anche nella documentazione di equals():


    Note that it is generally necessary to override the hashCode method whenever this method is overridden, so as to maintain the general contract for the hashCode method, which states that equal objects must have equal hash codes.

    Il condizionale diventa un imperativo quando questi oggetti devono essere usati come chiave per una mappa (quindi, proprio nel tuo caso), in quanto le mappe (HashMap, TreeMap, ecc) usano proprio tale metodo per indicizzare gli oggetti in chiave.

    Di conseguenza, oggetti uguali dovrebbero sempre restituire un hashCode uguale.


    Ricapitolando, se si vuole usare un oggetto di una determinata classe come chiave per una mappa, tale classe deve ridefinire correttamente i metodi equals() e hashCode().

    Il metodo equals() viene usato dalla mappa per verificare l'uguaglianza fra due oggetti della chiave.
    Il metodo hashCode() viene usato dalla mappa per indicizzare gli oggetti della chiave (per poter essere reperiti in tempo costante e con la sola eccezione del valore "null").

    Ciao.
    Ultima modifica di LeleFT; 05-08-2014 a 13:49
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    grazie, sei stato chiarissimo

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.