2008-09-27 19 views
7

Estoy acostumbrado a trabajar con PHP, pero últimamente he estado trabajando con Java y me está dando dolores de cabeza intentar resolverlo. Quiero salvar esta representación en Java:Java: Arrays & Vectors

 
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 manera limpia (es decir, ningún código sucio) para guardar esta cosa en Java? Nota; Me gustaría utilizar cadenas como índices de matriz (en la primera dimensión) y no sé el tamaño definitivo de las matrices.

Respuesta

12

Se puede utilizar un mapa y una lista (estos Ambos son interfaces implementadas en más de una forma para que elijas la más adecuada en tu caso).

Para obtener más información, consulte los tutoriales para Map y List y tal vez debería comenzar con el tutorial Collections.

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

    } 
} 
5

Quiere un Map, que están codificados por cualquier cosa. HashMap s trabajo 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 quieres algo más simple, la biblioteca tiene un commons-langMultiMap.

15

Intente utilizar un Map<String, List<String>>. Esto le permitirá usar cadenas como claves/índices en el mapa exterior y obtener un resultado que es una lista de cadenas como valores. Probablemente desee utilizar un HashMap para el mapa exterior y ArrayList para las listas internas.

Si quieres algo de código limpio que es similar a la de PHP que le diste a inicializarlo, se 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")); 
}}; 
2

estar prevenido que el Vector es el código heredado para el marco de las 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 hilos, y aunque lo hiciera, estaría más inclinado a usar el CopyOnWriteArrayList.