Java: Matrizes e Vetores
-
02-07-2019 - |
Pergunta
Eu estou acostumado a trabalhar com PHP, mas ultimamente tenho vindo a trabalhar com Java e estou tendo uma dor de cabeça tentando descobrir isso. Eu quero salvar esta representação em 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 uma maneira limpa (ou seja, nenhum código sujo) para salvar esta coisa em Java? Nota; Eu gostaria de usar cordas como índices de array (na primeira dimensão) e eu não sei o tamanho definitivo das matrizes ..
Solução
Você pode usar um mapa e uma lista (essas interfaces ambos são implementados em mais de uma maneira para que você possa escolher o mais adequado no seu caso).
Para mais informações confira os tutoriais para Mapa e Lista e talvez você deve começar com o Collections tutorial.
Um exemplo:
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");
}
}
Outras dicas
Tente usar um Map<String, List<String>>
. Isso permitirá que você use seqüências como chaves / índices para o mapa exterior e obter um resultado que é uma lista de strings como valores. Você provavelmente vai querer usar um HashMap
para ver o mapa exterior e ArrayList
de para as listas internas.
Se você quiser algum código limpo que é semelhante ao PHP que você deu para inicializar-lo, você pode fazer algo como isto:
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"));
}};
Você quer um Map , que são introduzidos por qualquer coisa. HashMap s trabalho na maioria dos casos .
Algo como isso.
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 você quiser algo mais simples, o commons-lang biblioteca tem um MultiMap .
Esteja avisado que o Vector é código legado para o quadro Collections. Ele sincroniza o acesso aos seus elementos que diminui o desempenho. A maioria dos casos de uso para usar lista não precisa deste tipo de segurança do thread, e mesmo se você fez, eu estaria mais inclinado a usar o CopyOnWriteArrayList .