2012-03-12 49 views
1

我有一个ArrayList,有一些条目作为HashMap中的一个值,如何向它添加新的值?在HashMap中添加条目到ArrayList

Thanks.Did这样的:

Map<String, ArrayList<String>> index = new HashMap<String, ArrayList<String>>(); 
void add(String kword, String... urls){ 
    if(index.containsKey(kword)){ 
     index.get(kword).addAll(Arrays.asList(urls)); 
    } else { 
     index.put(kword, (ArrayList<String>) Arrays.asList(urls)); 
    } 
} 
+0

你的代码是什么?您需要将其展示给我们以获得所需的答案。 – Lion 2012-03-12 19:04:27

+0

你能澄清你的问题吗? – 2012-03-12 19:07:14

+1

呃......如果'Arrays.asList()'不使用'ArrayList'作为结果,你的代码就会中断... – thkala 2012-03-12 19:13:46

回答

4

假设你有下面几行内容:

Map<K, ArrayList<V>> map = new HashMap<K, ArrayList<V>>(); 

那么这应该允许你添加新值所包含的任何名单在地图中有一个值:

map.get(listKey).add(newValue); 

当然,你也可以将结果map.get(listKey)给一个临时变量,以避免map.get()成本插入多个值时:

List<V> list = map.get(listKey); 

for (V value : newValues) 
    list.add(value); 
+0

是否有可能使用这类案件的iterrator? – 4lex1v 2012-03-12 19:11:07

+0

@JohnGray:1.一个迭代器做什么? 2.如果'newValues'是一个'Collection',那么带循环的代码片段已经在内部使用了一个迭代器... – thkala 2012-03-12 19:12:22

0

只要你有一个ArrayList<String>,像这样做:

List<String> l = map.get("your_key"); 
l.add("Some Other Value"); 

这是相当容易使用此代码段与不是String实例的列表。只要使用适当的通用。

1

取决于你想从你的HashMap添加什么值。它是条目,键还是值?您可以迭代地图上的条目,键或值,并将您想要的列表添加到列表中。下面

的示例获取从地图中的条目中,使用的HashMap entrySet()方法。它假定您有一种方法来检查条目是否是您正在查找的条目(isThisTheEntryIAmLookingFor(...))。

Map<String, String> map; 
//... 

ArrayList<Map.Entry<String, String>> list = 
     new ArrayList<Entry<String, String>>(); 

for (Map.Entry<String, String> e : map.entrySet()) { 

    if (isThisTheEntryIAmLookingFor(e)) { 

     list.add(e); 

    } 

} 

如果你只是想收集键或值,分别使用keySet()values(),用正确的类型。