Java: массивы и векторы

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

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
7
0
1 109
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Вам нужны карта, которые управляются чем угодно. 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.

Другие вопросы по теме