Java: Arrays & amp; Vectores
-
02-07-2019 - |
Pregunta
Estoy acostumbrado a trabajar con PHP, pero últimamente he estado trabajando con Java y me duele la cabeza intentando resolver esto. Quiero guardar esta representación 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"] ) )
¿Hay una forma limpia (es decir, sin código sucio) para guardar esta cosa en Java? Nota; Me gustaría usar cadenas como índices de matriz (en la primera dimensión) y no sé el tamaño definido de las matrices.
Solución
Puede usar un Mapa y una Lista (ambas son interfaces implementadas de más de una manera para que elija la más adecuada en su caso).
Para obtener más información, consulte los tutoriales de Mapa y List y tal vez debería comenzar con Tutorial de colecciones .
Un ejemplo:
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");
}
}
Otros consejos
Intente utilizar un Mapa < Cadena, Lista < String > >
. Esto le permitirá usar Cadenas como claves / índices en el mapa externo y obtener un resultado que será una lista de Cadenas como valores. Probablemente querrá usar un HashMap
para el mapa externo y ArrayList
para las listas internas.
Si desea algún código limpio que sea similar al PHP que dio para inicializarlo, puede hacer algo como esto:
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"));
}};
Desea un Mapa , que están codificados por casi cualquier cosa. HashMap en la mayoría de los casos .
Algo como esto.
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 desea algo más simple, la biblioteca commons-lang tiene una MultiMap .
Tenga en cuenta que el Vector es un código heredado para el marco de Colecciones. Sincroniza el acceso a sus elementos, lo que ralentiza el rendimiento. La mayoría de los casos de uso para usar List no necesitan este tipo de seguridad de subprocesos, e incluso si lo hiciera, estaría más inclinado a usar CopyOnWriteArrayList .