这是我在本网站上发布的第一个问题!
在大学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
答案 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>>();
或TreeMap
或Map
接口的任何直接具体子类。