public static void creatMap(Map<String,Integer> map){

 String[] tokens = input.split(" ");

for (String token: tokens){
String word = token.toLowerCase();
if(map.containsKey(word)){
int count = map.get(word);
map.put(word,  count + 1);
}else{
map.put(word, 1);
}
}
};
有一段关于Map的函数,我看不懂for循环中的String token: tokens条件
请教高手给我解释一下

解决方案 »

  1.   

    这是Foreach语法.
    定义一个String型变量token, 每次从数组tokens里取一个元素付给变量token,一直到把tokens里的所有元素都处理完.
      

  2.   

    tokens是要迭代的集合,token是当前元素。实际上走的是tokens的iterator()方法。
      

  3.   

    for (String token: tokens)//等价于for(int i = 0; i < tokens.length(); i++)
    其中token便是数组tokens中每一个元素
      

  4.   

    增强的for循环
    tokens是你上面得到的数组名字,它放在增强的for循环的冒号后面,意思就是说要从tokens数组中拿取数据出来,然后从你的数拿出来的值都是string类型,所以前面就会看见String  token.
    String token:tokens的意思就是说从tokens中获取数据,赋值给String类型的变量token,然后在循环体内使用啊。
      

  5.   

    便利tokens中的集合,token是便利出来的结果,类似于for(int i = 0; i < tokens.length(); i++)
      

  6.   

    这是加强for循环功能等价于for(int i = 0; i < tokens.length(); i++){};
      

  7.   

    java的增强型for循环,相当于c#中的foreach就是循环遍历集合中的元素
      

  8.   

    看起来明朗多了请问:
    从tokens中获取数据,赋值给String类型的变量token,让后如果复制成功for循环的条件判断就是true吗?
      

  9.   

    另外如果我想让我map里的值倒序输出怎么办呢?如下是个顺序输出的例子public  void displayMapA(Map<String, Integer> maps){
    Set<String> keys = maps.keySet();
    TreeSet<String> sortedKeys = new TreeSet<String >(keys);

    System.out.println("\nMap contain:\nKey\t\tValue");

    for(String key: sortedKeys )
    System.out.printf("%-10s%10s\n",key, maps.get(key));

    System.out.printf("\nsize:%d\nisEmpty: %b\n",maps.size(),maps.isEmpty());

    };
      

  10.   

    这是增强型的for循环,java jdk 1.5的新特性,与普通的for(int i = 0; i < tokens.length(); i++)相同,
    for (String token: tokens)这个循环中tokens是一个集合名,而token是遍历出来集合中的每一个元素