李林超博客
首页
归档
留言
友链
动态
关于
归档
留言
友链
动态
关于
首页
Java
正文
持有对象--Foreach与迭代器
Leefs
2019-12-12 AM
1999℃
0条
# 持有对象--Foreach与迭代器 ### 前言 本篇将讲述《Java编程思想》第11.13节,Foreach与迭代器,想必大家对这两个东西都不陌生,今天就展开讲讲它们之前的关系,希望给大家带来帮助。 ### 一、概述 foreach语法主要用于数组,但它也可以应用于任何Collection对象。 > foreach遍历Lit集合示例 ```java public class ForEachCollections { public static void main(String[] args) { Collection
cs = new LinkedList
(); Collections.addAll(cs,"Take the long way home".split(" ")); for(String s:cs){ System.out.print("'"+s+"'"); } } } ``` > 运行结果 ```java 'Take''the''long''way''home' ``` 看到上面的代码小编的问题就不知不觉的来了 问题1:foreach最开始我们使用它来遍历数组但是它为什么又可以遍历对象呢? > + 原因:从JDK1.5开始引入了Iterable接口,该接口包含一个能够产生Iterator的iterator()方法,并且Iterable接口被foreach用来在序列中移动。 因此如果你创建了任何实现Iterable的类,都可以将它用于foreach语句中: ```java public class IterableClass implements Iterable
{ protected String[] words=("And that is how we know the Earth to be banana-shaped").split(" "); public Iterator
iterator(){ return new Iterator
(){ private int index=0; public boolean hasNext(){ return index
运行结果 ```java And that is how we know the Earth to be banana-shaped ``` iterator()方法返回的是实现了`Iterator
`的匿名内部类的实例,该匿名内部类可以遍历数组中的所有单词。 在JDK1.5中,大量的类都是Iterable类型,主要包括所有的Collection类(但是不包括各种Map). 例如:下面的代码可以显示所有的操作系统的环境变量: ```java public class EnvironmentVariables { public static void main(String[] args) { for(Map.Entry entry:System.getenv().entrySet()){ System.out.println(entry.getKey()+":"+entry.getValue()); } } } ``` 输出结果我就不放上去了 `System.getenv()`返回一个Map,entrySet()产生一个由Map.Entry的元素构成的Set,并且这个Set是一个Iterable,因此它可以用于foreach循环。 foreach语句可以用于数组或其他任何Iterable,但是这并不意味着数组肯定也是一个Iterable,而任何自动包装也不会自动发生: ```java public class ArrayIsNotIterable { static
void test(Iterable
ib){ for(T t : ib){ System.out.print(t+" "); } } public static void main(String[] args) { test(Arrays.asList(1,2,3)); String[] strings = {"A","B","C"}; //An array works in foreach, but it's not Iterable: //!test(strings) //You must explicitly convert it to an Iterable: test(Arrays.asList(strings)); } } ``` > 运行结果 ```java 1 2 3 A B C ```
标签:
Java
,
Java编程思想
,
JavaSE
,
持有对象
非特殊说明,本博所有文章均为博主原创。
如若转载,请注明出处:
https://lilinchao.com/archives/279.html
上一篇
【转载】Java实现多级菜单(递归)
下一篇
持有对象--适配器方法惯用法
评论已关闭
栏目分类
随笔
2
Java
326
大数据
229
工具
31
其它
25
GO
47
NLP
4
标签云
Flink
Jenkins
HDFS
二叉树
Spark RDD
正则表达式
RSA加解密
Spark Streaming
gorm
容器深入研究
SQL练习题
MyBatis
Elasticsearch
Thymeleaf
字符串
哈希表
Http
SpringCloud
JavaWeb
散列
工具
Spark SQL
Java
递归
并发编程
Map
GET和POST
机器学习
Hive
Yarn
友情链接
申请
范明明
庄严博客
Mx
陶小桃Blog
虫洞
评论已关闭