遍历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)); }
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来遍历
这是最常见的并且在大多数情况下也是最可取的遍历方式。在键值都需要时使用。
注意:for-each循环在java 5中被引入所以该方法只能应用于java 5或更高的版本中。如果你遍历的是一个空的map对象,for-each循环将抛出NullPointerException,因此在遍历前你总是应该检查空引用。
方法二 在for-each循环中遍历keys或values。
如果只需要map中的键或者值,你可以通过keySet或values来实现遍历,而不是用entrySet。
方法三使用Iterator遍历
使用泛型:
不使用泛型: