关于Java:在HASMAP上迭代

Iterating over hashmap

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
How do I iterate over each Entry in a Map?
How can I iterate over a map of ?

我已经编写了以下代码,并且一直在迭代哈希图。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;

class demo
{
    public static void main(String v[]) {
        ArrayList<String> contactIds = new ArrayList<String>();
        contactIds.add("2");
        contactIds.add("3");

        HashMap names = new HashMap();
        names =  getNames(contactIds);

        // I want to get the total size of the hashmap  - names
        // for ex now there are 6 elements inside hashmap.
        // How can I get that count?

    }


    private static HashMap getNames(ArrayList contactIds) {
        HashMap names = new HashMap();
        String params = null;
        List<String> list = new ArrayList<String>();
        for(int i=0; i<contactIds.size();i++) {
            params = contactIds.get(i).toString();

            list.add(0,"aer-1");
            list.add(1,"aer-2");
            list.add(2,"aer-3");

            names.put(params,list) ;
         }

        return names;
    }
}

在这段代码中,映射中有六个元素,现在在主方法中,我如何迭代映射并获取总计数?

谢谢您。


你的问题在这里被询问和回答:

如何有效地迭代地图中的每个条目?

1
2
3
for (Map.Entry<String, String> entry : map.entrySet()) {
    System.out.println(entry.getKey() +"/" + entry.getValue());
}


看看JavaDoc。您要查找的是HashMap.size()表示总计数,HashMap.values()表示映射中的所有值,或者HashMap.entries()表示每对键和值。


"map"数据结构不是集合对象,但集合是。

在映射上迭代的最常见方法是使用底层的.entryset方法。

1
2
3
4
5
6
7
8
9
10
11
// For each loop
for ( Entry<String, String> entry : names ) {
    System.out.println( String.format("(%s, %s)", entry.getKey(), entry.getValue() ) );
}

// Iterator
Iterator iterator = names.entrySet().iterator
while( iterator.hasNext() ){
     Entry entry = iterator.next()
     System.out.println( String.format("(%s, %s)", entry.getKey(), entry.getValue() ) );
}

如果要查找映射节点的总数,请使用.size()方法。

编辑:

因为您希望每个列表的总大小存储在地图中,所以可以这样做。

1
2
3
4
5
6
7
Iterator iterator = names.entrySet().iterator
int count = 0;

while( iterator.hasNext() ){
     Entry entry = iterator.next()
     count += entry.getValue().size()
}