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。