7

我习惯于使用 PHP,但最近我一直在使用 Java,试图弄清楚这一点让我很头疼。我想用 Java 保存这个表示:

大批 (
        ["col_name_1"] => 数组 (
                               1 => [“col_value_1”],
                               2 => ["col_value_2"],
                               ... ,
                               n => [“col_value_n”]
                          ),
        ["col_name_n"] => 数组 (
                               1 => [“col_value_1”],
                               2 => ["col_value_2"],
                               ... ,
                               n => [“col_value_n”]
                          )
)

有没有一种干净的方法(即没有脏代码)在 Java 中保存这个东西?笔记; 我想使用字符串作为数组索引(在第一维中),我不知道数组的确定大小..

4

4 回答 4

15

尝试使用Map<String, List<String>>. 这将允许您将字符串用作外部映射的键/索引,并获得作为值的字符串列表的结果。您可能希望将 aHashMap用于外部地图,将ArrayList's 用于内部列表。

如果您想要一些类似于您提供的初始化 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"));
}};
于 2008-09-27T21:08:14.743 回答
12

您可以使用 Map 和 List (这两者都是以不止一种方式实现的接口,供您选择最适合您的情况的接口)。

有关更多信息,请查看MapList教程,也许您应该从Collections教程开始。

一个例子:

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");

    }
}
于 2008-09-27T21:15:19.487 回答
5

你想要一个Map,它几乎可以用任何东西作为键。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

于 2008-09-27T21:07:21.970 回答
2

请注意,Vector是 Collections 框架的遗留代码。它同步对其元素的访问,这会降低性能。大多数使用 List 的用例不需要这种线程安全,即使你这样做了,我也会更倾向于使用CopyOnWriteArrayList

于 2008-09-28T03:14:58.527 回答