1

我目前有一个这样配置的地图。

Map<String, ArrayList<Object>> map = new HashMap<String, ArrayList<Object>>();

目的是能够进行如下设置:

array("foo"->array(1->"aaa",2->"bbb",3->"ccc"),
      "bar"->array(1->"aaa",2->"bbb",3->"ccc"),
      "bah"->array(1->"aaa",2->"bbb",3->"ccc"),
)

我遇到的问题是我可以很好地创建根数组,但它会执行以下操作,使用前面的示例作为说明

array("foo"->array(3->"ccc"),
      "bar"->array(2->"bbb"),
      "bah"->array(3->"ccc"),
)

我试图找出的是如何附加子数组而不是覆盖它。我认为这很容易完成我只是错过了一些明显的东西。

4

4 回答 4

5

您需要首先检查 map 是否具有特定键的条目。如果没有,则添加一个空数组列表。

之后,从映射中获取该数组列表并将对象添加到该数组列表。

Map<String, ArrayList<Object>> map = new HashMap<String, ArrayList<Object>>();
    String first = "FIRST";
    if (map.get(first) == null){
        map.put(first, new ArrayList<Object>());
    }

    map.get(first).add(new Object());

如果您将在地图上方打印,您将获得所需的输出。

于 2013-06-11T04:04:21.967 回答
0

您可以创建一个添加到子数组的方法,如果它不存在则创建它:

Map<String, ArrayList<Object>> map = new HashMap<String, ArrayList<Object>>();
addToArray(map, "foo", "aaa");
addToArray(map, "foo", "bbb");
addToArray(map, "foo", "ccc");

addToArray(map, "bar", "aaa");
// ...

方法是:

private static void addToArray(final Map<String, ArrayList<Object>> map, final String key, final Object object) {
    if (!map.containsKey(key))
        map.put(key, new ArrayList<Object>());
    map.get(key).add(object);
}

如果您只需要在数组中存储字符串,则可以使用 anArrayList<String>而不是ArrayList<Object>.

于 2013-06-11T04:07:57.677 回答
0

在 Java 中附加到数组是不可能的,因为它们具有固定的长度。我建议你ArrayList改用。

HashMap<String, ArrayList<Object>> map = new HashMap<String, ArrayList<Object>>();

public void appendToMap(String key, Object o)
{
    if(!map.containsKey(key))
    {
        map.put(key, new ArrayList<Object>());
    }
    map.get(key).add(o);
}

之后只需设置您的值:

appendToMap("foo", "aaa");
appendToMap("foo", "bbb");
// and so on...
于 2013-06-11T04:08:09.637 回答
0

切换到String而不是Object (如果列表总是包含字符串)

Map<String, List<String>> map = new HashMap<String, List<String>>();

然后添加到您Map的如下

// check if a List already exists
if ((list = map.get("foo")) == null) { // if !exists,

    list = new ArrayList<String>(1); // CREATE a new List
    list.add("aaa");
    map.put("foo", list); // ADD the new List to Map

} else { // if exists,
    list.add("aaa"); // ADD to the existing List
}
于 2013-06-11T04:11:08.717 回答