Question

J'ai l'habitude de travailler avec PHP, mais dernièrement, je travaille avec Java et j'ai mal à la tête quand j'essaie de comprendre. Je souhaite enregistrer cette représentation en 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"] 
                          )
)

Existe-t-il un moyen propre (c’est-à-dire aucun code sale) de sauvegarder cette chose en Java? Remarque; Je voudrais utiliser Strings comme index de tableau (dans la première dimension) et je ne connais pas la taille définitive des tableaux.

Était-ce utile?

La solution

Vous pouvez utiliser une carte et une liste (les deux sont des interfaces implémentées de plusieurs manières pour vous permettre de choisir la plus appropriée dans votre cas).

Pour plus d'informations, consultez les didacticiels sur la carte . et Liste et peut-être devriez-vous commencer par la tutoriel sur les collections .

Un exemple:

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");

    }
}

Autres conseils

Essayez d’utiliser une map < chaîne, liste < string > > . Cela vous permettra d'utiliser des chaînes en tant que clés / indices dans la carte externe et d'obtenir un résultat sous la forme d'une liste de chaînes en tant que valeurs. Vous voudrez probablement utiliser un HashMap pour la carte externe et des ArrayList pour les listes intérieures.

Si vous voulez un code propre similaire au PHP que vous avez donné pour l'initialiser, vous pouvez faire quelque chose comme ceci:

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"));
}};

Vous souhaitez une Carte , qui sont liés par à peu près n'importe quoi. HashMap fonctionne dans la plupart des cas .

Quelque chose comme ça.

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);

Si vous voulez quelque chose de plus simple, la bibliothèque commons-lang a un Carte Multi .

Sachez que Vecteur est un code hérité du cadre Collections. Il synchronise l'accès à ses éléments, ce qui ralentit les performances. La plupart des cas d'utilisation de List n'ont pas besoin de ce type de sécurité de thread, et même si vous le faisiez, je serais plus enclin à utiliser le CopyOnWriteArrayList .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top