map遍历与统计

2021年1月15日 79点热度 0条评论 来源: yesIcando-bupt

遍历Map方法一(通过HashMap类实现统计单词出现次数)

要求:通过命令行输入多个单词,单词之间用逗号分开,统计每个单词出现的次数,并把单词和其出现的次数分别打印出来,使用HashMap类实现。

输入单词如下图:

package michael.wlq;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;

public class MapTest {
	public static void main(String[] args) {

		HashMap<String, Integer> map = new HashMap<String, Integer>();

		for (int i = 0; i < args.length; i++) {
			if (map.get(args[i]) == null) {
				map.put(args[i], new Integer(1));
			} else {
				Integer in = (Integer) map.get(args[i]);
				in = new Integer(in.intValue() + 1);
				map.put(args[i], in);
			}
		}

		// 通过keySet()方法获取键的集合
		Set<String> set = map.keySet();

		// 遍历键的集合,获取每个key,然后通过map.get(key)方法得到value
		for (Iterator<String> iter = set.iterator(); iter.hasNext();) {
			String key = (String) iter.next();
			Integer value = (Integer) map.get(key);

			System.out.println(key + "  : " + value);
		}
	}
}

String[] ks = { "11", "22", "33", "44", "55", "44", "33", "11" };
		Map<String, Integer> map = new HashMap<String, Integer>();
		for (String s : ks) {
			if (map.get(s) != null) {
				map.put(s, map.get(s) + 1);
			} else {
				map.put(s, 1);
			}
		}
		System.out.println("统计输出:");
		for (String s : map.keySet()) {
			System.out.println("	" + s + "  :  " + map.get(s));
		}

map遍历的四种方式

public class TestMap {
 6     public static void main(String[] args) {
 7         Map<Integer, String> map = new HashMap<Integer, String>();
 8         map.put(1, "a");
 9         map.put(2, "b");
10         map.put(3, "ab");
11         map.put(4, "ab");
12         map.put(4, "ab");// 和上面相同 , 会自己筛选
13         System.out.println(map.size());
14         // 第一种:
21         System.out.println("第一种:通过Map.keySet遍历key和value:");
22         for (Integer in : map.keySet()) {
23            
24             String str = map.get(in);//得到每个key多对用value的值
25             System.out.println(in + "     " + str);
26         }
27         // 第二种:
28         System.out.println("第二种:通过Map.entrySet使用iterator遍历key和value:");
29         Iterator<Map.Entry<Integer, String>> it = map.entrySet().iterator();
30         while (it.hasNext()) {
31              Map.Entry<Integer, String> entry = it.next();
32                System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());
33         }
34         // 第三种:推荐,尤其是容量大时
35         System.out.println("第三种:通过Map.entrySet遍历key和value");
36         for (Map.Entry<Integer, String> entry : map.entrySet()) {
37             //Map.entry<Integer,String> 映射项(键-值对)  有几个方法:用上面的名字entry
38             //entry.getKey() ;entry.getValue(); entry.setValue();
39             //map.entrySet()  返回此映射中包含的映射关系的 Set视图。
40             System.out.println("key= " + entry.getKey() + " and value= "
41                     + entry.getValue());
42         }
43         // 第四种:
44         System.out.println("第四种:通过Map.values()遍历所有的value,但不能遍历key");
45         for (String v : map.values()) {
46             System.out.println("value= " + v);
47         }
48     }
49 }

方法一 在for-each循环中使用entries来遍历

这是最常见的并且在大多数情况下也是最可取的遍历方式。在键值都需要时使用。

[java] 
view plain  
copy

  1. Map<Integer, Integer> map = new HashMap<Integer, Integer>();  
  2.   
  3. for (Map.Entry<Integer, Integer> entry : map.entrySet()) {  
  4.   
  5.     System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());  
  6.   
  7. }  

注意:for-each循环在java 5中被引入所以该方法只能应用于java 5或更高的版本中。如果你遍历的是一个空的map对象,for-each循环将抛出NullPointerException,因此在遍历前你总是应该检查空引用。

 

方法二 在for-each循环中遍历keys或values。

如果只需要map中的键或者值,你可以通过keySet或values来实现遍历,而不是用entrySet。

[java] 
view plain  
copy

  1. Map<Integer, Integer> map = new HashMap<Integer, Integer>();  
  2.   
  3. //遍历map中的键  
  4.   
  5. for (Integer key : map.keySet()) {  
  6.   
  7.     System.out.println("Key = " + key);  
  8.   
  9. }  
  10.   
  11. //遍历map中的值  
  12.   
  13. for (Integer value : map.values()) {  
  14.   
  15.     System.out.println("Value = " + value);  
  16.   
  17. }  

方法三使用Iterator遍历

使用泛型:

[java] 
view plain  
copy

  1. Map<Integer, Integer> map = new HashMap<Integer, Integer>();  
  2.   
  3. Iterator<Map.Entry<Integer, Integer>> entries = map.entrySet().iterator();  
  4.   
  5. while (entries.hasNext()) {  
  6.   
  7.     Map.Entry<Integer, Integer> entry = entries.next();  
  8.   
  9.     System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());  
  10.   
  11. }  

不使用泛型:

[java] 
view plain  
copy

  1. Map map = new HashMap();  
  2.   
  3. Iterator entries = map.entrySet().iterator();  
  4.   
  5. while (entries.hasNext()) {  
  6.   
  7.     Map.Entry entry = (Map.Entry) entries.next();  
  8.   
  9.     Integer key = (Integer)entry.getKey();  
  10.   
  11.     Integer value = (Integer)entry.getValue();  
  12.   
  13.     System.out.println("Key = " + key + ", Value = " + value);  
  14.   
  15. }  
  1.  

    原文作者:yesIcando-bupt
    原文地址: https://blog.csdn.net/qq_35124535/article/details/53817223
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。