查看“Foreach(增强for)”的源代码
←
Foreach(增强for)
跳到导航
跳到搜索
因为以下原因,您没有权限编辑本页:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
[[category:Java]] == 关于 == For-Each 循环也叫增强型的 for 循环,或者叫 foreach 循环,是 JDK5.0 的新特性(其他新特性比如泛型、自动装箱等),For-Each 循环的加入简化了集合的遍历。 这种方式并不是新的语法,只是<big>'''语法糖'''</big>。即编写的 foreach 循环的代码并不是直接转成字节码,而是由编译器先转成对应的语法,然后再转成字节码,可以理解成是编译器对一些语法的封装提供的另一种方便阅读编写功能代码的实现方式。 Java 中提供的 foreach 语法糖其底层实现方式主要有两种: 1、对于集合类或实现迭代器的集合使用'''迭代器'''的遍历方式; 2、对于数组集合使用'''数组'''的遍历方法。 * '''foreach 可以与任何实现了 Iterable 接口的对象一起工作''' === 语法 === <syntaxhighlight lang="java"> for(type element: array) { System.out.println(element); } </syntaxhighlight> === 使用 === <syntaxhighlight lang="java"> public class ForeachTest { public static void main(String[] args) { int[] arr = {1, 2, 3, 4, 5}; System.out.println("----------普通for遍历------------"); for(int i=0; i<arr.length; i++) { System.out.println(arr[i]); } System.out.println("---------增强for遍历-------------"); for(int element:arr) { System.out.println(element); } System.out.println("---------二维数组遍历-------------"); int[][] arr2 = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}} ; for(int[] row : arr2) { for(int element : row) { System.out.println(element); } } } } </syntaxhighlight> == 原理 == == for、foreach、Iterator == === 性能比较 === 由下代码可以看出: # ArrayList、LinkList 中:Iterator > foreach > for; # 不要在 LinkList 中使用 for,效率太低; <syntaxhighlight lang="java" highlight=""> package com.eijux; import java.util.ArrayList; import java.util.Iterator; import java.util.LinkedList; public class TestFor { ArrayList<Integer> arrayList = new ArrayList<>(); LinkedList<Integer> linkedList = new LinkedList<>(); public TestFor() { for (int i = 0; i < 100000; i++) { arrayList.add(i); linkedList.add(i); } } public void testArrayList() { int number; long start, end, result; start = System.currentTimeMillis(); for (int i = 0; i < arrayList.size(); i++) { number = arrayList.get(i); } end = System.currentTimeMillis(); result = end - start; System.out.println("ArrayList for循环消耗时间:" + result); start = System.currentTimeMillis(); for (int i : arrayList) { number = i; } end = System.currentTimeMillis(); result = end - start; System.out.println("ArrayList foreach循环消耗时间:" + result); start = System.currentTimeMillis(); Iterator<Integer> itr = arrayList.iterator(); while (itr.hasNext()){ number = itr.next(); } end = System.currentTimeMillis(); result = end - start; System.out.println("ArrayList Iterator循环消耗时间:" + result); } public void testLinkList() { int number; long start, end, result; start = System.currentTimeMillis(); for (int i = 0; i < linkedList.size(); i++) { number = linkedList.get(i); } end = System.currentTimeMillis(); result = end - start; System.out.println("LinkList for循环消耗时间:" + result); start = System.currentTimeMillis(); for (int i : linkedList) { number = i; } end = System.currentTimeMillis(); result = end - start; System.out.println("LinkList foreach循环消耗时间:" + result); start = System.currentTimeMillis(); Iterator<Integer> itr = linkedList.iterator(); while (itr.hasNext()){ number = itr.next(); } end = System.currentTimeMillis(); result = end - start; System.out.println("LinkList Iterator循环消耗时间:" + result); } public static void main(String[] args) { (new TestFor()).testArrayList(); (new TestFor()).testLinkList(); } } </syntaxhighlight> 结果: : <syntaxhighlight lang="java" highlight=""> ArrayList for循环消耗时间:24 ArrayList foreach循环消耗时间:11 ArrayList Iterator循环消耗时间:6 LinkList for循环消耗时间:25181 LinkList foreach循环消耗时间:19 LinkList Iterator循环消耗时间:8 </syntaxhighlight> == 集合的三种遍历方式 == 集合遍历的三种方式: # 普通for # 增强型for # Iterator <syntaxhighlight lang="java"> public class ForeachTest { public static void main(String[] args) { //以三种方式遍历集合List List<String> list = new ArrayList<String>(); list.add("a"); list.add("b"); list.add("c"); System.out.println("----------普通for-----------"); for(int i = 0; i < list.size(); i++) { System.out.println(list.get(i)); } System.out.println("----------增强型for(实现了Iterable)-----------"); for(String str: list) { System.out.println(str); } System.out.println("----------Iterator-----------"); for(Iterator<String> iter = list.iterator(); iter.hasNext();) { System.out.println(iter.next()); } } } </syntaxhighlight>
返回至“
Foreach(增强for)
”。
导航菜单
个人工具
登录
命名空间
页面
讨论
大陆简体
已展开
已折叠
查看
阅读
查看源代码
查看历史
更多
已展开
已折叠
搜索
导航
首页
最近更改
随机页面
MediaWiki帮助
笔记
服务器
数据库
后端
前端
工具
《To do list》
日常
阅读
电影
摄影
其他
Software
Windows
WIKIOE
所有分类
所有页面
侧边栏
站点日志
工具
链入页面
相关更改
特殊页面
页面信息