黑马程序员技术交流社区

标题: 使用Iterator迭代器取出Map中的值的疑问 [打印本页]

作者: 看丶小胖    时间: 2015-3-14 10:15
标题: 使用Iterator迭代器取出Map中的值的疑问
本帖最后由 看丶小胖 于 2015-3-19 12:07 编辑
  1. import java.util.*;
  2. public class MapEntryDemo {

  3. public static void main(String[] args) {
  4.   // TODO Auto-generated method stub
  5.   Map<String,Integer> m=new HashMap<String,Integer>();//这里千万不能用Map,因为他没有定义存储方式
  6.   m.put("ss", 6);
  7.   m.put("ksll", 9);
  8.   m.put("ksole", 3);
  9.   Set<String> set=m.keySet();//使用KeySet()方法获取HashMap中的键。
  10.   Iterator<String> it=set.iterator();//使用迭代器便于一一取出Set集合中的键的值。
  11.   while(it.hasNext())
  12.   {        
  13.    /*int value=m.get(it.next());
  14.    System.out.println("键:"+it.next()+"—— 值:"+value);
  15.    */
  16. [color=Red]/*这里如果我按照上面注释的代码敲,编译时通过的,但是运行时会出错。抛出java.util.NoSuchElementException也就是说我没有可以迭代的元素。而且得到的输出结果也很奇葩
  17. 键:ksole—— 值:6.但是我按照如下代码就可以。可我已经给Iterator加上了泛型,为什么使用it.next()就不行,难道他返回的就不是String?[/color]
  18. */

  19.    String s=it.next();
  20.    int value=m.get(s);
  21.    System.out.println("键:"+s+" 值:"+value);         
  22.   }

  23. }

  24. }
复制代码

作者: sh1tge    时间: 2015-3-14 10:27
楼主  it.next 在循环内只能用一次 否则最后一次取值的时候
执行System.out.println("键:"+it.next()+"—— 值:"+value); it.next已经没元素了 所以会报NoSuchElementException
作者: 看丶小胖    时间: 2015-3-14 14:49
sh1tge 发表于 2015-3-14 10:27
楼主  it.next 在循环内只能用一次 否则最后一次取值的时候
执行System.out.println("键:"+it.next()+"— ...

恩,明白了,很感谢你的回答,我懂了:hug:




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2