Domanda

Sono abituato a lavorare con PHP, ma ultimamente ho lavorato con Java e ho mal di testa nel tentativo di capirlo. Voglio salvare questa rappresentazione in Java:

Array ( 
        ["col_name_1"] => Array ( 
                               1 => ["col_value_1"], 
                               2 => ["col_value_2"], 
                               ... , 
                               n => ["col_value_n"] 
                          ),
        ["col_name_n"] => Array ( 
                               1 => ["col_value_1"], 
                               2 => ["col_value_2"], 
                               ... , 
                               n => ["col_value_n"] 
                          )
)

Esiste un modo pulito (cioè nessun codice sporco) per salvare questa cosa in Java? Nota; Vorrei usare le stringhe come indici di array (nella prima dimensione) e non conosco la dimensione definita degli array ..

È stato utile?

Soluzione

Puoi usare una Mappa e un Elenco (entrambi sono interfacce implementate in più di un modo per scegliere il più adeguato nel tuo caso).

Per ulteriori informazioni, consultare i tutorial per Mappa e Elenco e forse dovresti iniziare con Collezioni tutorial.

Un esempio:

import java.util.*;

public class Foo {
    public static void main(String[] args) {
        Map<String, List<String>> m = new HashMap<String, List<String>>();
        List<String> l = new LinkedList<String>();
        l.add("col_value_1");
        l.add("col_value_2");
        //and so on
        m.put("col_name_1",l); //repeat for the rest of the colnames

       //then, to get it you do

       List<String> rl = m.get("col_name_1");

    }
}

Altri suggerimenti

Prova a utilizzare una Mappa < String, Elenco < String > > . Ciò ti consentirà di utilizzare le stringhe come chiavi / indici nella mappa esterna e di ottenere un risultato come un elenco di stringhe come valori. Probabilmente vorrai usare un HashMap per la mappa esterna e ArrayList per le liste interne.

Se vuoi un codice pulito simile al PHP che hai fornito per inizializzarlo, puoi fare qualcosa del genere:

Map<String, List<String>> columns = new HashMap<String, List<String>>() {{
    put("col_name_1", Arrays.asList("col_val_1", "col_val_2", "col_val_n"));
    put("col_name_2", Arrays.asList("col_val_1", "col_val_2", "col_val_n"));
    put("col_name_n", Arrays.asList("col_val_1", "col_val_2", "col_val_n"));
}};

Desideri una Mappa , che sono digitati da qualsiasi cosa. HashMap nella maggior parte dei casi .

Qualcosa del genere.

List<String> col1Vals = new java.util.ArrayList<String>();
col1Vals.add("col_value_1");
col1Vals.add("col_value_2");
Map<String, List<String>> map = new HashMap<String, List<String>>();
map.put("col_name_1", col1Vals);

Se vuoi qualcosa di più semplice, la libreria commons-lang ha una MultiMap .

Tieni presente che Vector è il codice legacy per il framework Collezioni. Sincronizza l'accesso ai suoi elementi che rallenta le prestazioni. La maggior parte dei casi d'uso per l'utilizzo di List non richiede questo tipo di sicurezza del thread e, anche se lo facessi, sarei più propenso a utilizzare CopyOnWriteArrayList .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top