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。