abc123tnt 2008-10-09 22:45
浏览 238
已采纳

谁能解释一下java5.0中增强的for(:)循环的运行机制?

Set s = HashMap.keySet()
-------------->>>>>>>>>>>
Iterator it = s.iterator();
while(it.hasNext())
System.out.println(m.get(it.next()));
不能保持插入HashMap的顺序输出
----------->>>>>>>>>>>
for(Integer i : s)
System.out.println(m.get(i));
可以保持插入顺序输出

上面一段伪代码,一个是通过HashMap的keySet()方法得到一个键集合,再在键集合上迭代,输出HashMap的值,不能保持插入HashMap顺序输出

另一个通过java 5.0的新特性 for(:)循环输出HashMap的值,就能保持插入序输出,

为什么呢?谁能解释一下 for(:)运行机制,谢谢
[b]问题补充:[/b]
我用的HashMap键是 Integer型 值是String型的,而且HashMap的中元素要多一些,我用的测试用例有22个键值对,前13行保持插入序,而13行以后就乱序了,

还有增强的for(:)循环是将第二个操作数转化为数组实现,还是迭代器实现呢?
[b]问题补充:[/b]
发现了,是我测试用例的问题,增强for循环的方法和迭代器的方法都会乱序输出,增强for也是用的迭代器实现,如果要保持插入顺序,应该用LinkedHashMap类,呵呵,谢谢大家

  • 写回答

3条回答 默认 最新

  • lggegegmail 2008-10-10 11:35
    关注

    jdk1.5的增强for循环, 如果是Collection, 调用的正是iterator()方法.

    在上面的例子中, 调用的都是 Set soo 的 soo.iterator() 方法.

    所以, LZ的结论错了, aidiyuxin说对了: 两个方法是一样的结果.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog