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

问题描述

Set<Integer> s = HashMap<Integer, String>.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(:)运行机制,谢谢问题补充:我用的HashMap键是 Integer型 值是String型的,而且HashMap的中元素要多一些,我用的测试用例有22个键值对,前13行保持插入序,而13行以后就乱序了,还有增强的for(:)循环是将第二个操作数转化为数组实现,还是迭代器实现呢?问题补充:发现了,是我测试用例的问题,增强for循环的方法和迭代器的方法都会乱序输出,增强for也是用的迭代器实现,如果要保持插入顺序,应该用LinkedHashMap类,呵呵,谢谢大家

解决方案

jdk1.5的增强for循环, 如果是Collection, 调用的正是iterator()方法.在上面的例子中, 调用的都是 Set<String> soo 的 soo.iterator() 方法.所以, LZ的结论错了, aidiyuxin说对了: 两个方法是一样的结果.
解决方案二:
测试例子Map<String , String> moo = new HashMap<String , String>();moo.put("1","1");moo.put("2","2");moo.put("3","3");Set<String> soo = moo.keySet();Iterator<String> ioo = soo.iterator();while(ioo.hasNext()){System.out.println(moo.get(ioo.next()));}for(String str : soo){System.out.println(moo.get(str));}结果:321321没有什么特殊的地方啊
解决方案三:
如果用for(int i = 0 ; i < s i++)遍历呢?

时间: 2024-11-01 16:37:33

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

用for/in在Java 5.0中增强循环

for/in 循环通常叫作 增强的 for 或者 foreach,它是 Java 5.0 中一个极为方便的特性.实际上它没有提供任何新的功能,但它显然能让一些日常编码任务变得更简单一些.在本文中,您将学习这方面的许多内容,其中包括使用 for/in 在数组和集合中进行遍历,以及如何用它避免不必要(或者只是令人厌烦的)类型转换.您还将学习如何实现 for/in,了解新的 Iterable 接口的一些细节,甚至还将学习如何让您自己的定制对象用这个新的构造进行遍历.最后,您将学习 for/in 不能

Flash AS3.0中uint数据类型做循环判断应注意

数据|数据类型|循环 在AS3.0中增加了新的数据类型uint,其表示正整数.我们可以先看一下下面的例子: for(var i:uint = 5;i>=0;i--)  {  trace("test");  }  运行该代码将会产生一个运行错误:"Error: Error #1502: 脚本的执行时间已经超过了 15 秒的默认超时设置.".如果我们将i声明成int或者Number将可以顺利完成任务.这个主要是因为我们声明的i为uint,它的有效的范围为0~429

Hadoop 2.0中的基本术语解释

(1) Hadoop 1.0 第一代Hadoop,由分布式存储系统HDFS和分布式计算框架MapReduce组成,其中,HDFS由一个NameNode和多个DataNode组成,MapReduce由一个JobTracker和多个TaskTracker组成,对应Hadoop版本为Hadoop 1.x和0.21.X,0.22.x. (2) Hadoop 2.0 第二代Hadoop,为克服Hadoop 1.0中HDFS和MapReduce存在的各种问题而提出的.针对Hadoop 1.0中的单NameN

关于JDK5.0中预定义的解释

我们先来看一下,下面这段代码: public class B extends A { @Override public void test1() { // TODO Auto-generated method stub super.test1(); } } 上面这段代码很简单,创建一个类,类的名字为B 同时让这个B类继承与A类,在A类中 有一个方法叫 test1 ,现在我们想在B类中覆盖A类的test1方法,我们会看到代码中会出 现 @Override 一句注释,它是用来干什么的呢?有很多学习J

探讨ASP.NET 2.0中的Web控件改进技术

asp.net|web|控件 ASP.NET 2.0并没有抛弃1.1版本中的任何现有控件,而是增加了一组新的控件;同时还引入了若干新的控件开发技术.本系列文章将对这些内容展开全面探讨. 一. 引言 到目前为止,你可能已经了解了大量的ASP.NET 2.0新特征-母版页面,主题,提供者,等等--所有这样内容都相当精彩;但是,你是否了解到有关定制Web控件开发方面的重大变化?这正是我在本文中所想讨论的.如果你已经从事于控件开发,那么,我想本文所描述的ASP.NET 2.0中的新的改进特征会立即应用于

ASP.NET 2.0 中的代码隐藏和编译

asp.net|编译 代码隐藏 虽然该代码隐藏模型在 2.0 中是不同的,但是它的语法已经进行了少量更改.实际上,该更改十分细微,如果您不仔细查看,甚至都无法注意到它Figure 1 Syntax in ASP.NET 2.0 Default.aspx<%@ Page Language="C#" AutoEventWireup="true"     CodeFile="Default.aspx.cs" Inherits="Msdn

将ARIS模型导入IBM Process Designer v8.0中

第 1 部分介绍通过标准 BPMN2.0 导入以及采用 ARIS XML 格式将流程模型从 ARIS 导入 IBM Process Designer 的两种方法.第 2 部分介绍如何将新导入的 ARIS 模型版本与 Process Designer 中已扩展和执行的流程合并在一起. 许多公司和机构使用 ARIS 来记录他们的http://www.aliyun.com/zixun/aggregation/13476.html">业务流程已有多年.ARIS(具体来讲是 ARIS Busines

ADO.NET 2.0 中的新增 DataSet 功能

ADO.NET 2.0 中的新增 DataSet 功能 发布日期: 1/13/2005 | 更新日期: 1/13/2005 Jackie Goldstein Renaissance Computer Systems 适用于: Microsoft ADO.NET 2.0 Visual Basic 编程语言 摘要:了解有关 .NET Framework DataSet 类以及与它密切相关的类中的新增 ADO.NET 2.0 功能的知识.这些更改包括对 DataSet.DataTable 和 Data

Spring.Net在Mvc4.0中应用的说明

案例Demo:http://yunpan.cn/cJ5aZrm7Uybi3 访问密码 414b Spring.Net在Mvc4.0中应用的说明 1.引用dll       2.修改Global文件 (SpringMvcApplication)       3.控制器添加属性     4.WebConfig配置   <!--必须紧跟着configuration之后-->   <configSections>     <sectionGroup name="spring