Я привык работать с PHP, но в последнее время я работаю с Java, и у меня головная боль, пытаясь понять это. Я хочу сохранить это представление на 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"]
)
)
Есть ли чистый способ (т.е. без грязного кода) сохранить эту вещь на Java? Примечание; Я хотел бы использовать строки в качестве индексов массива (в первом измерении), и я не знаю определенного размера массивов.




Вам нужны карта, которые управляются чем угодно. HashMap работают в большинстве случаев.
Что-то вроде этого.
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);
Если вам нужно что-то попроще, в библиотеке Commons-lang есть MultiMap.
Попробуйте использовать Map<String, List<String>>. Это позволит вам использовать строки в качестве ключей / индексов на внешней карте и получить в результате список строк в качестве значений. Вероятно, вы захотите использовать HashMap для внешней карты и ArrayList для внутренних списков.
Если вам нужен чистый код, похожий на тот, который вы дали для его инициализации, вы можете сделать что-то вроде этого:
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"));
}};
Вы можете использовать карту и список (оба эти интерфейса реализованы более чем одним способом, чтобы вы могли выбрать наиболее подходящий для вашего случая).
Для получения дополнительной информации ознакомьтесь с руководствами для карта и Список, и, возможно, вам стоит начать с учебника Коллекции.
Пример:
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");
}
}
Имейте в виду, что Вектор - это устаревший код для инфраструктуры коллекций. Он синхронизирует доступ к своим элементам, что снижает производительность. В большинстве случаев использования List такая безопасность потоков не требуется, и даже если бы вы это сделали, я был бы более склонен использовать CopyOnWriteArrayList.