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