访问Java Map中的ArrayList

时间:2013-12-14 22:03:26

标签: java arrays data-structures map arraylist

这是我在本网站上发布的第一个问题!

在大学Java作业的最后一部分,我的班级被要求表明我们了解如何使用不同类型的数组。

有一次,我们需要制作并维护一个Map(键,值)。 但是,我们需要使用ArrayList(String)作为Map的值。

添加到此地图似乎很容易: 只需检查有问题的Map是否已包含指定的键,然后创建数组,其值填入并“放入”,并将键字符串String添加到Map。

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

public void addToMap(String key, String value) {
  if (!this.map.containsKey(key) {
    ArrayList<String> array = new ArrayList<String>();
    array.add(value);
    this.map.put(key, array);
  }
  else {
    this.map.get(key).add(value); // Does this add a new item to the current ArrayList?
  }
}

但是,如果我想编辑该数组的内容呢? 我今天刚刚开始看地图,所以我对它们有点新意,但是我看到它们有一个'put'方法 - 我明白通常用什么put,pop和push,所以这有点熟悉。 我是否必须将数组的内容复制到一个新的临时对象中,删除()旧的“key =&gt; value”对并使用其他数据创建一个新的?

非常感谢您的帮助! :d

3 个答案:

答案 0 :(得分:0)

您的Map包含对ArrayList的引用。

String key = "some list name";
// This assumes this entry is in the map; doesn't check for null
ArrayList<String> listInMap = map.get(key);
listInMap.add("new thing to add to list");

当您使用Map.get()时,它会返回地图中ArrayList的引用,而不是它的副本。然后,您可以通过返回的引用修改List

答案 1 :(得分:0)

要编辑一个特定arrayList的内容,首先需要从地图中获取它,然后只需从数组中添加/删除:

ArrayList<String> list = map.get("key");
list.get(index);
list.add("something");

答案 2 :(得分:0)

来自Map.#put

的Javadoc
  

将指定的值与此映射中的指定键相关联   (可选操作)。 如果地图以前包含地图   键,旧值由指定值替换。 (地图m是   据说当且仅当m.containsKey(k)包含密钥k的映射   会回来的。)

因此,您可以看到,如果您修改了array,则无需删除该对。只需使用上一个键重新映射它即可。

您的代码中存在语法错误。您无法实例化接口。所以你的代码应该是

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

TreeMapMap接口的任何直接具体子类。