2008-09-27 56 views
7

我习惯于使用PHP,但最近我一直在使用Java,而且我很头痛,想要解决这个问题。我想保存在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中这件事情?注意;我想使用字符串作为数组索引(在第一维中),我不知道数组的确定大小。

回答

12

您可以使用地图和列表(实施这些都是接口以多种方式让您选择最适合您的情况)。

欲了解更多信息,请查看教程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"); 

    } 
} 
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

15

尝试使用Map<String, List<String>>。这将允许您使用Strings作为外键映射的键/索引,并将结果作为字符串列表作为值。您可能需要使用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")); 
}}; 
2

事先警告的Vector是集合框架遗留代码。它同步访问其元素,这会降低性能。大多数使用List的用例都不需要这种线程安全性,即使你这样做,我也会更倾向于使用CopyOnWriteArrayList