Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    HashMap: Ottenere una chiave dato un valore

    Salve a tutti, sto creando un semplice programma in java utilizzando le hashmap e sto trovando questo piccolo inconveniente, avrei bisogno di ottenere una chiave dato un valore. Poiché ci possono essere più chiavi con lo stesso valore mi andrebbe benissimo sia che me ne venga restituito uno casuale sia che mi venga restituito l'array dei valori corrispondenti. Esiste qualche metodo che già lo faccia? Se no, a livello logico, come lo costruisco?
    Grazie

  2. #2
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Quote Originariamente inviata da crissstian96 Visualizza il messaggio
    Poiché ci possono essere più chiavi con lo stesso valore mi andrebbe benissimo sia che me ne venga restituito uno casuale sia che mi venga restituito l'array dei valori corrispondenti.
    'spetta... Tu stai mettendo in mappa una cosa del genere?

    map.put("A", "value1");
    map.put("A", "value2");
    map.put("A", "value3");

    Tieni conto che facendo così il valore di A viene sovrascritto ogni volta!

    Spiega meglio come hai modellato i dati.. Hai una mappa di liste? Ad esempio Map<String, List<String>>?
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  3. #3
    Quote Originariamente inviata da Alex'87 Visualizza il messaggio
    'spetta... Tu stai mettendo in mappa una cosa del genere?

    map.put("A", "value1");
    map.put("A", "value2");
    map.put("A", "value3");

    Tieni conto che facendo così il valore di A viene sovrascritto ogni volta!

    Spiega meglio come hai modellato i dati.. Hai una mappa di liste? Ad esempio Map<String, List<String>>?
    Io ho una mappa <String><Integer> come questa:
    map.put("A", 32);
    map.put("B", 41);
    map.put("C", 32);
    map.put("D", 12);

    mi servirebbe un metodo che facesse in modo che passando ad esempio 41 mi venga restituito "B", e passando 32 mi venga restituito l'array contenente "A" e "C" oppure semplicemente una delle due stringhe.
    Insomma, il metodo map.get() se dai una chiave ti restituisce il corrispettivo valore, io voglio l'esatto contrario.
    E' possibile?
    Ultima modifica di crissstian96; 25-11-2013 a 18:14

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da crissstian96 Visualizza il messaggio
    mi servirebbe un metodo che facesse in modo che passando ad esempio 41 mi venga restituito "B", e passando 32 mi venga restituito l'array contenente "A" e "C" oppure semplicemente una delle due stringhe.
    Insomma, il metodo map.get() se dai una chiave ti restituisce il corrispettivo valore, io voglio l'esatto contrario.
    E' possibile?
    Sì, è possibile ma non c'è un metodo "di serie" che fa questo. Devi implementarlo tu. Iteri sulle chiavi, per ogni chiave prendi il valore, se è quel valore puoi restituire subito la chiave o accodarla in una lista se l'intenzione è di restituire più chiavi.
    Tutto qui.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    un esempio di codice potrebbe essere

    codice:
    for (Entry <String, String > entry : map.entrySet()){
        if (entry.getValue().equals(keyToCompare){
            return entry.getKey()); 
        }
    }
    return null;
    ma io ti faccio due piccole osservazioni :

    1. ritorni la prima chiave con valore keyToCompare e come sai chiave univoca (valori no)
    2. mi fermerei un secondo a riflettere. Le mappe sono fatte per consentire un accesso molto rapido ai valori, in genere la ricerca la si fa per chiave, non per valore. Dover fare sistematicamente una ricerca per valore mi fa sorgere il sospetto che i dati non li stai modellizzando bene.

    La secoda osservazione ovviamente è personale e dettata dalla mia esperienza....vuole essere un invito a pensare "sto davvero facendo bene"?
    per il resto, l'algoritmo che ti ho dato dovrebbe andare bene
    RTFM Read That F*** Manual!!!

  6. #6
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Se però hai davvero bisogno di accedere sia a chiavi che valori.. prova una bidirectional map (BiMap)
    http://stackoverflow.com/questions/1...al-map-in-java
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

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.