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

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

7 голосов
/ 28 сентября 2008

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

Ответы [ 4 ]

15 голосов
/ 28 сентября 2008

Попробуйте использовать 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"));
}};
12 голосов
/ 28 сентября 2008

Вы можете использовать карту и список (оба эти интерфейса реализованы более чем одним способом, чтобы вы могли выбрать наиболее подходящий в вашем случае).

Для получения дополнительной информации обратитесь к учебникам по Карта и Список , и, возможно, вам следует начать с учебника Коллекции .

Пример:

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 голосов
/ 28 сентября 2008

Вы хотите Карта , в которую вводится почти все. HashMap s работает в большинстве случаев.

Примерно так.

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 .

2 голосов
/ 28 сентября 2008

Имейте в виду, что Vector является устаревшим кодом для платформы Collections. Он синхронизирует доступ к своим элементам, что снижает производительность. Большинство сценариев использования для использования List не требуют такого рода безопасности потоков, и даже если бы вы это сделали, я бы более склонен использовать CopyOnWriteArrayList .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...