Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it L'avatar di Donovant
    Registrato dal
    Sep 2005
    residenza
    London
    Messaggi
    1,329

    Hashtable<obj1, obj2> si deve creare ???

    Salve, volevo sapre se io volessi utilizzare una Hashtable che ha come chiave un OBJ1 e come valore un altro oggetto OBJ2, devo implementare o estendere qualche classe Hash???
    In tal caso quale e come.
    Grazie.

    PS: è possibile usare il "foreach" con una Hashtable es:
    Hashtable ht = new Hashtable(20);
    qui i vari put stile ht.put(inero, stringa);

    for(String st : ht){...}// ovviamente qui c'è il dubbio (penso) su cosa restituire, l'indice o il valore....?
    Beati gli smemorati, perchè avranno la meglio anche sui loro errori...

    My gallery: http://donovant.deviantart.com/gallery/

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Hashtable<obj1, obj2> si deve creare ???

    Originariamente inviato da Donovant
    Salve, volevo sapre se io volessi utilizzare una Hashtable che ha come chiave un OBJ1 e come valore un altro oggetto OBJ2, devo implementare o estendere qualche classe Hash???
    In tal caso quale e come.
    Semplicemente istanzi l'Hashtable specificando i tipi parametrici:

    codice:
    Hashtable<OBJ1,OBJ2> tuaVariabile = new Hashtable<OBJ1,OBJ2>();
    
    tuaVariabile.put(unOggettoObj1, unOggettoObj2);

    Originariamente inviato da Donovant
    PS: è possibile usare il "foreach" con una Hashtable es:
    Hashtable ht = new Hashtable(20);
    qui i vari put stile ht.put(inero, stringa);

    for(String st : ht){...}// ovviamente qui c'è il dubbio (penso) su cosa restituire, l'indice o il valore....?
    Ci sono 2 questioni qui.
    Una "Map" in generale non può essere usata direttamente nel for-each. Perché non implementa Iterable. Solo le collezioni che implementano Collection sono Iterable.

    Per cui se vuoi iterare su una Map devi scegliere se iterare sul Set delle chiavi o sul Set delle entry. Vedi appunto keySet() e entrySet().

    L'altra questione è che se la collezione non è parametrizzata (se appunto non usi i generics), la collezione stessa e l'iteratore restituisco Object. E quindi la variabile dichiarata nel for-each può essere solamente di tipo Object e nient'altro, in quanto non è previsto alcun cast implicito. Insomma: quello che l'iteratore restituisce deve essere assegnabile alla variabile dichiarata nel for-each.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    non so se ho capito bene... a te serve una mappa chiave->valore e sono tutti e due oggetti?
    io farei così:

    Map<Ob1, Ob2> mappa = new HashMap<Ob1, Ob2>();

  4. #4
    Utente di HTML.it L'avatar di Donovant
    Registrato dal
    Sep 2005
    residenza
    London
    Messaggi
    1,329
    Originariamente inviato da Donovant PS: è possibile usare il "foreach" con una Hashtable es: Hashtable ht = new Hashtable(20); qui i vari put stile ht.put(inero, stringa); for(String st : ht){...}// ovviamente qui c'è il dubbio (penso) su cosa restituire, l'indice o il valore....?
    Infatti avevo il dubbio per il primo problema, ovvero cosa restituire ed chiave o valore?

    Hashtable<OBJ1,OBJ2> tuaVariabile = new Hashtable<OBJ1,OBJ2>(); tuaVariabile.put(unOggettoObj1, unOggettoObj2);
    per prova avevo fatto:
    Hashtable<int, String> h = new Hashtable<int, String>();

    Mi da errore, ma forse ho proprio sbagliato a scegliere int, e String, che cmq accetta già di default come chiave valore.
    Beati gli smemorati, perchè avranno la meglio anche sui loro errori...

    My gallery: http://donovant.deviantart.com/gallery/

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Donovant
    per prova avevo fatto:
    Hashtable<int, String> h = new Hashtable<int, String>();
    I tipi parametrici possono essere solo tipi "reference" (anche array), mai primitivi (byte, char, ecc...).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    Utente di HTML.it L'avatar di Donovant
    Registrato dal
    Sep 2005
    residenza
    London
    Messaggi
    1,329
    Fesso di me, anzichè scrivere "<Integer, String>" ho scritto "<int, String>"....ora funge.

    Grazie, per il veloce supporto!
    Beati gli smemorati, perchè avranno la meglio anche sui loro errori...

    My gallery: http://donovant.deviantart.com/gallery/

  7. #7
    Utente di HTML.it L'avatar di Donovant
    Registrato dal
    Sep 2005
    residenza
    London
    Messaggi
    1,329
    "andbin": stavo leggendo una tua spiegazione sul legame (contratto) fra metodo euquals() e hashCode(), dove dici che se equals() rest true, allora anche l'hashcode sarà uguale....
    Non vorrei aver capito male, ma allora perchè se io in una hashTable <int, String> 2 stringhe uguali non hanno stesso hashcode, cioè ht.get(1).equals( ht.get(5) ) è TRUE ma ht.get(1).hashCode() è diverso da ht.get(5).hashCode()???
    Beati gli smemorati, perchè avranno la meglio anche sui loro errori...

    My gallery: http://donovant.deviantart.com/gallery/

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Donovant
    dove dici che se equals() rest true, allora anche l'hashcode sarà uguale....
    Deve essere così per rispettare il "contratto" tra i due metodi.

    Originariamente inviato da Donovant
    2 stringhe uguali non hanno stesso hashcode
    No, questo non è possibile, perché chi ha scritto la implementazione di String l'ha fatta in modo da rispettare il contratto. Quindi 2 stringhe uguali (strA.equals(strB) == true) hanno sicuramente lo stesso hashcode.

    Due stringhe diverse potrebbero avere lo stesso hashcode. E se due oggetti hanno hashcode diversi, allora sono certamente oggetti diversi.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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 © 2025 vBulletin Solutions, Inc. All rights reserved.