学习java笔记 --- 一个实现Iterable<E>接口的小范例
来源:互联网 发布:淘宝1钻店铺出售 编辑:程序博客网 时间:2024/05/22 10:48
以下的文档摘自JDK 5.0文档说明
java.lang
接口 Iterable<T>
public interface Iterable<T>
实现这个接口允许对象成为 "foreach" 语句的目标。
Iterator<T>
iterator()
返回一个在一组 T 类型的元素上进行迭代的迭代器。
iterator
Iterator<T> iterator()
- 返回一个在一组 T 类型的元素上进行迭代的迭代器。
- 返回:
一个迭代器。
=============================================
以下的文字不是摘自JDK 5.0文档
其中上面有说明了,实现这个接口允许对象成为 "foreach" 语句的目标。这样就可以类似使用数组那样,用foreach语句来遍历所有相关的对象了
像这样的用法:
String[] s ={"a","b","c"};for (String ss : s) {System.out.println("ss: "+ss);}Iterable<T>
不过,像一般自定义的类和其实例对象,想要使用for each语句来遍历它本身集体的话,可能就要实现Iterable<T>接口了。
像以下的代码:
(code1)
package cn.yang.collection;import java.util.Iterator;/** * 实现Iterable<E>接口的Person类 * @author yangqinjiang * */public class Person implements Iterable<Person>{/** * 实现Iterable接口中要求实现的方法 */@Overridepublic Iterator<Person> iterator() {return new MyIterator();//返回一个MyIterator实例对象}/** * MyIterator是内部类,实现了Iterator<E>接口的类 * 像这样的内部类,在网络上有很多这样的写法,我这里只是参考他们的写法罢了 * @author yangqinjiang * */class MyIterator implements Iterator<Person>{/**相当于索引*/private int index =0;@Overridepublic boolean hasNext() {//只要在调用next()后,index自加,确保index不等于person的长度return index!=person.length;}@Overridepublic Person next() {//使用索引来获取person数组中的某一项return person[index++];}@Overridepublic void remove() {//未实现这个方法}}private String name;private int age;/**person数组,是目标操作对象*/private Person[] person;/**为了方便简单点,故写一个这样的构造方法*/public Person(int size){person=new Person[size];for (int i = 0; i < size; i++) {person[i]=new Person(""+i, i);}}public void add(Person person){//未实现这个方法}public Person(){//未实现这个方法}public Person(String name,int age){this.name=name;this.age=age;}//getterpublic String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "person [name=" + name + ", age=" + age + "]";}}
(code2)
package cn.yang.collection;import java.util.ArrayList;import java.util.Iterator;import java.util.List;/** * 实现Iterable<E>接口的Person2类 * @author yangqinjiang * */public class Person2 implements Iterable<Person2>{/** * 实现Iterable接口中要求实现的方法 */@Overridepublic Iterator<Person2> iterator() {return new MyIterator();//返回一个MyIterator实例对象}/** * MyIterator是内部类,实现了Iterator<E>接口的类 * 像这样的内部类,在网络上有很多这样的写法,我这里只是参考他们的写法罢了 * @author yangqinjiang * */class MyIterator implements Iterator<Person2>{/**相当于索引,不过不是数组索引*/private int index =0;@Overridepublic boolean hasNext() {return index!=person.size();}@Overridepublic Person2 next() {return person.get(index++);}@Overridepublic void remove() {}}private String name;private int age;/**在Person2类中,person是一个数组链表*/private List<Person2> person=new ArrayList<Person2>();/**添加一个新Person2实例对象到person链表中*/public void add(Person2 person2){this.person.add(person2);}public Person2(){}public Person2(String name,int age){this.name=name;this.age=age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "person [name=" + name + ", age=" + age + "]";}}然后在main方法中,一个一个地调用下面方法
(code3)
/** * 使用"for each" 循环,可以打印数组 */private static void printStrings() {System.out.println("printStrings() method running");String[] s ={"d","f","s"};for (String ss : s) {System.out.println("ss: "+ss);}System.out.println("printStrings() method end\n");}
输出结果:
printStrings() method running
ss: d
ss: f
ss: s
printStrings() method end
(code4)
System.out.println("testPerson() method running");Person y1=new Person("1", 1);Person y2=new Person("2", 2);Person y3=new Person("3", 3);Person y4=new Person("4", 4);Person y5=new Person("5", 5);//数组Person y[]={y1,y2,y3,y4,y5};for (Person ys : y) {System.out.println(ys.getName());}//IteratorSystem.out.println("Iterator<Person>...");Iterator<Person> i = new Person(10).iterator();while(i.hasNext()){System.out.println(i.next().toString());}//也可以这样打印System.out.println("other...");Person yy=new Person(20);for (Person ys : yy) {System.out.println(ys.toString());}System.out.println("testPerson() method end\n");
输出结果:
testPerson() method running
1
2
3
4
5
Iterator<Person>...
person [name=0, age=0]
...
person [name=9, age=9]
other...
person [name=0, age=0]
...
person [name=19, age=19]
testPerson() method end
(code5)
System.out.println("testPerson2() method running");Person2 p = new Person2("300", 300);Person2 p1 = new Person2("30", 30);Person2 p2 = new Person2("40", 40);Person2 p3 = new Person2("50", 50);Person2 p4 = new Person2("60", 60);Person2 p5 = new Person2("70", 70);p.add(p1);p.add(p2);p.add(p3);p.add(p4);p.add(p5);//IteratorIterator<Person2> ii=p.iterator();while (ii.hasNext()) {System.out.println("Person2: "+ii.next().toString());}System.out.println("testPerson2() method end\n");
输出结果:
testPerson2() method running
Person2: person [name=30, age=30]
Person2: person [name=40, age=40]
Person2: person [name=50, age=50]
Person2: person [name=60, age=60]
Person2: person [name=70, age=70]
testPerson2() method end
总结:很明显,实现这个接口允许对象成为 "foreach" 语句的目标。(呵呵,拿这句话来当成总结吧)
20120504,五四青年节哟,为何学校不放假?呀,五一才过了不久,又想着放五四节了》》其实在大学里,可以把每天当成周末的啦。光阴似箭啊,珍惜
- 学习java笔记 --- 一个实现Iterable<E>接口的小范例
- 学习java笔记 --- 一个实现Iterable<E>接口的小范例
- [java学习笔记]Iterator和Iterable接口
- API学习接口Iterable
- java.lang.Iterable接口
- 接口 Iterator<E> 与 接口 Iterable<T>
- Java框架集合:Collection<E>、Iterable<T>和Iterator<E>接口
- 关于Iterable接口和 Iteraotor接口的关系和实现
- JS iterable 学习笔记
- Iterator和Iterable的 新理解--一个神奇的接口
- Java 学习笔记--解决一个类实现多个接口的问题
- Java学习笔记--解决一个类实现多个接口的问题
- JAVA——Iterable接口
- Java中接口Iterable与Iterator的区别
- java集合中的Iterable接口的简介与运用
- java中的接口Iterator和Iterable的区别
- Java iterator iterable comparable comparator等接口设计的区别
- Java迭代器:iterator和iterable接口的区别
- 33家国内外知名的手机广告平台的SDK名单汇总,吐血推荐
- Linux内核设计与实现笔记--chapter3 进程管理
- 计算机软件研究方面的几个亮点
- 佛家经典禅语
- beyond compare 3.10在异常关机后无法启动
- 学习java笔记 --- 一个实现Iterable<E>接口的小范例
- Struts2的日期格式化以及日期插件
- 剖解MapReduce
- C# 中的委托和事件
- 在Xcode中配置opencv2.2
- 选择排序
- NSLog中使用的格式符
- CvEMParams、CvEM的学习
- 字符串的全排列