概述
java基础-迭代器(Iterator)与增强for循环
作者:尹正杰
版权声明:原创作品,谢绝转载!否则将追究法律责任。
一.Iterator迭代器概述
Java中提供了很多个集合,它们在存储元素时,采用的存储方式不同。我们需要取出这些集合中的元素,可通过一种通用的方式来完成。
Collection集合元素的通用获取方式:在取元素之前先要判断集合中有没有元素,如果有,就把这个元素取出来,继续在判断,如果还有就在取出来。一直把集合中所有的元素全部取出。这种取出方式专业术语称为迭代。换句话说,迭代是取出集合中元素的一种方式,因为Collection中有iterator方法,所以每一个子类集合对象都是迭代器对象。
二.迭代器的实现原理
其实集合中的迭代器就是获取结合中元素的方式。这是时候我们就不得不说一下Iterator接口了,经过查阅API文档发现它有三个抽象方法,如下:
由于Iterator只是接口,不能被直接实例化,因此想要使用该接口就必须实现该接口的所有抽象方法,而我们学习的Collection接口也定影实现Iterator接口的抽象方法,即“iterator()”。因此只要是Collection的实现类就必须重写“iterator()”方法,最终返回“Iterator”接口实现类的对象(也就是可迭代对象),然后在调用hasNext()和next()方法来对集合进行迭代操作。
综上所述,我们可以总结为以下三点:
1>.迭代器不保证取出来元素的顺序和存入的顺序一致,“有序”是靠集合实例本身保证的;
2>.迭代器本身是一个接口,该方法返回的是一个迭代器实例对象,通常使用的是接口多态使用迭代器;
3>.迭代器中常用的两个方法是:
a>.boolean hasNext() : 用来判断结合中是否有下一个元素可以迭代,如果返回true,说明可以迭代。
b>.Object next() : 用来返回迭代的下一个元素,并把指针向后移动一位。
迭代器的执行过程,可以用张图来帮助大家理解,如下:
三.迭代器的代码实现
1 /*
2 @author :yinzhengjie3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
4 EMAIL:y1053419035@qq.com5 */
6
7 packagecn.org.yinzhengjie.note;8
9 importjava.util.ArrayList;10 importjava.util.Collection;11 importjava.util.Iterator;12
13 public classIteratorDemo {14 public static voidmain(String[] args) {15 Collection coll = new ArrayList();16 coll.add("yinzhengjie");17 coll.add("尹正杰");18 coll.add("java");19 coll.add("python");20 coll.add("shell");21 coll.add("golang");22
23 //调用集合的方法iterator()获取出,Iterator接口的实现类的对象
24 Iterator it1 =coll.iterator();25
26 System.out.println("第一种方式进行迭代:");27 //1>.用while循环遍历集合进行迭代
28 while(it1.hasNext()) {29 System.out.println("t"+it1.next());30 }31
32 System.out.println("第二种方式进行迭代:");33 //2>.用for循环进行迭代(相对while循环更节省内存,因为it2是for局部遍历,而it1是main方法的变量)
34 for(Iterator it2 =coll.iterator();it2.hasNext();) {35 System.out.println("t"+it2.next());36 }37
38 System.out.println("第三种方式进行迭代:");39 //3>.用foreach循环(也叫增强for循环)继续迭代,需要JDK1.5版本以后才可以哟!
40 for(String string : coll) {41 System.out.println("t"+string);42 }43 }44 }45
46
47 /*
48 以上代码执行结果如下:49 第一种方式进行迭代:50 yinzhengjie51 尹正杰52 java53 python54 shell55 golang56 第二种方式进行迭代:57 yinzhengjie58 尹正杰59 java60 python61 shell62 golang63 第三种方式进行迭代:64 yinzhengjie65 尹正杰66 java67 python68 shell69 golang70 */
四.集合迭代过程中的转型
1 /*
2 @author :yinzhengjie3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
4 EMAIL:y1053419035@qq.com5 */
6
7 packagecn.org.yinzhengjie.note;8
9 importjava.util.ArrayList;10 importjava.util.Collection;11 importjava.util.Iterator;12
13 public classIteratorDemo {14 public static voidmain(String[] args) {15 Collection coll = new ArrayList();16 coll.add("yinzhengjie");17 coll.add("尹正杰");18 coll.add("Java");19
20 Iterator it =coll.iterator();21 while(it.hasNext()){22 Object obj =it.next();23 if(obj instanceofString) {24 String str =(String)obj;25 System.out.println(str.length());26 }27 }28 }29 }30
31
32 /*
33 以上代码执行结果如下:34 1135 336 437 */
五.增强for循环遍历数组
增强for循环是JDK1.5以后出来的一个高级for循环,专门用来遍历数组和集合的,它的内部原理其实是一个Iterator迭代器,所以在遍历的过程中,不能对集合中的元素进行增删操作。JDK1.5版本后,出现新的接口,即“java.lang.Iterable”。只要实现“java.lang.Iterable”这个接口,就允许对象称为增强for循环(“foreach”语句,注意“foreach”并不是关键字哟!)的目标。
1 格式如下:2 for( 数据类型 变量名:数组或这集合){3 System.out.println(变量名);4 }
如果只做遍历的话,推荐大家使用增强for循环, 因为for循环存在优点的同时也会存在缺点。
优点:代码少了,方便对容器遍历。
缺点:没有索引,不能操作容器里面的元素。
接下来我们用foreach来遍历数组和集合,代码如下:
1>.遍历数组
1 /*
2 @author :yinzhengjie3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
4 EMAIL:y1053419035@qq.com5 */
6
7 packagecn.org.yinzhengjie.note;8
9 public classForeachDemo {10 public static voidmain(String[] args) {11
12 String[] arr = {"yinzhengjie","org","cn"};13 for(String string : arr) {14 System.out.println(string+"tt"+string.length());15 }16 }17 }18
19
20 /*
21 以上代码执行结果如下:22 yinzhengjie 1123 org 324 cn 225 */
2>.遍历集合
1 /*
2 @author :yinzhengjie3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
4 EMAIL:y1053419035@qq.com5 */
6
7 packagecn.org.yinzhengjie.note;8
9 importjava.util.ArrayList;10 importjava.util.Collection;11
12 classStudent{13 privateString name;14 private intage;15 publicString getName() {16 returnname;17 }18 public voidsetName(String name) {19 this.name =name;20 }21 public intgetAge() {22 returnage;23 }24 public void setAge(intage) {25 this.age =age;26 }27 public Student(String name, intage) {28 super();29 this.name =name;30 this.age =age;31 }32 publicStudent() {33 super();34 }35 //这里我们重写一下toString方法!方便System.out.pirntln在调用该对象的toString方法时不会去找Object的默认返回值。
36 publicString toString() {37 return this.name + "---" + this.age;38
39 }40 }41
42
43 public classForeachDemo {44 public static voidmain(String[] args) {45 //接口多态
46 Collection coll = new ArrayList<>();47 coll.add(new Student("yinzhengjie",18));48 coll.add(new Student("尹正杰",20));49
50 for(Student p : coll) {51 System.out.println(p);52 }53 }54 }55
56
57 /*
58 以上代码执行结果如下:59 yinzhengjie 1160 org 361 cn 262 */
最后
以上就是友好雨为你收集整理的java 迭代器 for循环_java基础-迭代器(Iterator)与增强for循环的全部内容,希望文章能够帮你解决java 迭代器 for循环_java基础-迭代器(Iterator)与增强for循环所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复