Java:数组和向量
时间:2020-03-06 14:49:55 来源:igfitidea点击:
我曾经使用过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中?笔记;我想使用Strings作为数组索引(在第一个维度中),但我不知道数组的确定大小。
解决方案
我们需要一个地图,该地图几乎由任何键控。 HashMaps在大多数情况下都可以工作。
这样的事情。
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 >>"。这将允许我们将Strings用作外部映射的键/索引,并获得结果作为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"));
}};
我们可以使用Map和List(这两种接口都是以多种方式实现的,我们可以根据自己的情况选择最合适的接口)。
有关更多信息,请查看Map and List教程,也许我们应该从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");
}
}
请注意,Vector是Collections框架的旧代码。它会同步访问其元素,从而降低性能。使用List的大多数用例不需要这种线程安全性,即使我们这样做,我也更倾向于使用CopyOnWriteArrayList。

