Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it L'avatar di mark2x
    Registrato dal
    Nov 2005
    Messaggi
    1,940

    [JAVA] Array associativi? [niubbo]

    Sono alle prime armi con Java: vorrei sapere come è possibile "tradurre" il seguente codice PHP in JAVA:

    Codice PHP:
    <?php
    $myarray 
    = array();

    // array associativi.
    $myarray["chiave1"] = "valore1";
    $myarray["chiave2"] = "valore2";
    $myarray["chiave3"] = "valore3";

    // valori aggiunti runtime.
    for ($indice=4;$indice<6;$indice++) $myarray["chiave".$indice] = "valore".$indice;

    // costrutto while list.
    while (list($chiave,$valore) = each($myarray))
        {
        echo 
    $valore." - ";
        }

    // out: valore1 - valore2 - valore3 - valore4 - valore5 -
    ?>
    Ovvero com'è possibile in Java creare array associativi, chiave->valore?

    Grazie.

    [.:: JaguarXF ::.]
    __________________

  2. #2
    C'è l'interfaccia Map e sue implementazioni. Una Map è una collezione che associa delle chiavi ai suoi elementi. Le mappe non possono contenere chiavi duplicate, ed ogni chiave può essere associata ad un solo valore.
    Una tipica implementazione di una mappa è l’Hashtable. Questa classe permette di associare ad ogni elemento della collezione una chiave univoca. Sia la chiave sia l’elemento associato sono di tipo Object (quindi per il polimorfismo, un qualsiasi oggetto). Si aggiungono elementi mediante il metodo put(Object key, Object value), e si recuperano tramite il metodo get(Object key). In particolare il metodo get() permette un recupero molto performante dell’elemento della collezione, mediante la specifica della chiave. Per esempio:
    codice:
    Hashtable table = new Hashtable();
    table.put("1", "la data attuale è ");
    table.put("2", new Date());
    table.put("3", table);
    for (int i = 0; i <= table.size(); i++){
    System.out.println(table.get(""+i));
    }
    Come tutte le collection, anche l’Hashtable è una collezione eterogenea. Non sono ammesse chiavi duplicate, né elementi null. Inoltre un oggetto Hashtable è sincronizzato di default.
    Una classe non sincronizzata (e quindi ancora più performante) e del tutto simile ad Hashtable, è la classe HashMap.
    Per quanto riguarda le classi Hashtable e HashMap esistono delle regole per gestirne al meglio la performance, che si basano su due

    Un'altra interfaccia è SortedMap che rappresenta la versione ordinata di Map. Una implementazione di SortedMap è TreeMap. La classe HashMap è notevolmente più performante rispetto a TreeMap.Quest’ultima però gestisce l’ordinamento, che non è una caratteristica di tutte le mappe. Ovviamente, l’ordinamento è gestito sulle chiavi e non sui valori.

    L'argomento è abbastanza vasto, e ci sono parecchie guide in giro.
    Al mio segnale... scatenate l'inferno!

  3. #3
    Utente di HTML.it L'avatar di mark2x
    Registrato dal
    Nov 2005
    Messaggi
    1,940
    Grazie mille!
    Lo leggerò con calma.

    [.:: JaguarXF ::.]
    __________________

  4. #4
    Utente di HTML.it L'avatar di mark2x
    Registrato dal
    Nov 2005
    Messaggi
    1,940
    Perdona, ed il costrutto for-each style come lo traduco?

    Codice PHP:
    // costrutto while list in PHP.
    while (list($chiave,$valore) = each($myarray))
        {
        echo 
    $valore." - ";
        } 

    Il codice JAVA, come mi hai suggerito è:
    codice:
    Hashtable table = new Hashtable();
    table.put("chiave1", "valore1");
    table.put("chiave2", "valore2");
    table.put("chiave3", "valore3");    
    for (int i = 4; i <= 6; i++) table.put("chiave"+i, "valore"+i);
    	    	    
    for (int i = 0; i <= table.size(); i++) System.out.println(table.get("chiave"+i));
    // while list ???

    [.:: JaguarXF ::.]
    __________________

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    906
    Il costutto for che ti hanno suggerito funga da foreach.
    Naturalmente questo for va bene se usi chiavi che si autoincrementano e nella norma non e' cosi'. Di solito in casi come il tuo una map o array associativo non ti servono a nulla.
    Una mappa e' utile quando devi accedere ai singoli valori in essa contenuta per chiave, quindi generalmente in maniera non sequenziale.
    Se cio' che ti serve e' inserire n valori in una struttura dati e poi stamparli nell'ordine, allora e' piu' indicato usare una List.
    Ad esempio
    codice:
    ArrayList lista = new ArrayList();
    lista.add("valore1");
    lista.add("valore2");
    lista.add("valore3");
    for(int i=0; i<lista.size(); i++) {
       System.out.print(lista.get(i)+" - ");
    }

  6. #6
    Utente di HTML.it L'avatar di mark2x
    Registrato dal
    Nov 2005
    Messaggi
    1,940
    Ti ringrazio, ma cercavo proprio il costrutto simil-php while list con array associativi (chiave, valore).
    Non so praticamente nulla di JAVA, ma diversamente è per PHP e per il mondo Web.
    In tali casi qul costrutto l'ho usato centinaia di volte per listare:

    - i dati in GET/POST/COOKIE;
    - i dati in SESSION.

    Quindi ne cercavo uno analogo in JAVA, oltre al ciclo for s'intende, che fa la stessa cosa ma è ben più "scomodo".

    [.:: JaguarXF ::.]
    __________________

  7. #7
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    906
    Io invece con php non ho molta esperienza. Cmq una cosa del genere dovrebbe assomigliarci
    codice:
    //Restituisce la "lista" delle chiavi
    Enumeration e = table.keys();
    //finche ci sono chiavi
    while(e.hasMoreElements()) {
       //stampo. e.nextElements() restituisce la chiave. 
       //table.get(chiave) restituisce il valore della chiave
       System.out.println(table.get(e.nextElements()) + " - ");
    }

  8. #8
    Utente di HTML.it L'avatar di mark2x
    Registrato dal
    Nov 2005
    Messaggi
    1,940
    Grazie, lo provo!

    [.:: JaguarXF ::.]
    __________________

  9. #9
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    906
    Dimenticavo. Con le mappe non hai garanzie sull'ordine. Le chiavi probabilmente non ti verranno restituite nell'ordine in cui vengono inserite.

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.