第一步:沒有接口的迭代器簡單實現原理java
1 package com.bjsxt.xiaofei; 2 /** 3 * 迭代器底層原理 4 * 方法: 5 * hasNext() 6 * next() 7 * remove() 8 * @ClassName: MyAarryList 9 * @Description: TODO(這裏用一句話描述這個類的做用) 10 * @author 尚曉飛 11 * @date 2014-7-29 下午7:06:09 12 * 13 */ 14 public class MyAarryList { 15 //容器底層是數組 16 private String[] str={"a","b","c","d","e","f","g","h"}; 17 //數組的長度 18 private int size=str.length; 19 //遊標 20 private int cursor=-1; 21 22 /** 23 * 判斷迭代器是否有下一個元素 24 * @Title: hasNext 25 * @Description: TODO(這裏用一句話描述這個方法的做用) 26 * @return 27 * @return boolean 返回類型 28 * @author 尚曉飛 29 * @date 2014-7-29 下午7:09:50 30 */ 31 public boolean hasNext(){ 32 return cursor+1<size; 33 } 34 35 /** 36 * 獲取下一個元素 37 * @Title: next 38 * @Description: TODO(這裏用一句話描述這個方法的做用) 39 * @return 40 * @return String 返回類型 41 * @author 尚曉飛 42 * @date 2014-7-29 下午7:10:36 43 */ 44 public String next(){ 45 cursor++; 46 return str[cursor]; 47 } 48 49 /** 50 * 移除 51 * @Title: remove 52 * @Description: TODO(這裏用一句話描述這個方法的做用) 53 * @return void 返回類型 54 * @author 尚曉飛 55 * @date 2014-7-29 下午7:20:39 56 */ 57 public void remove(){ 58 //沒有實現 59 } 60 61 public static void main(String[] args) { 62 MyAarryList list=new MyAarryList(); 63 //測試簡易迭代器 64 while (list.hasNext()) { 65 String element=list.next(); 66 System.out.println("MyAarryList.main()"+element); 67 68 } 69 } 70 }
第二步:有接口的迭代器簡單實現原理,基本等同容器類的迭代器數組
思想至上,原理至上ide
1 package com.bjsxt.xiaofei; 2 3 import java.util.Iterator; 4 5 /** 6 * 迭代器底層原理 7 * 方法: 8 * hasNext() 9 * next() 10 * remove() 11 * @ClassName: MyAarryList 12 * @Description: TODO(這裏用一句話描述這個類的做用) 13 * @author 尚曉飛 14 * @date 2014-7-29 下午7:06:09 15 * 16 */ 17 public class MyAarryList2 { 18 //容器底層是數組 19 private String[] str={"a","b","c","d","e","f","g","h"}; 20 //數組的長度 21 private int size=str.length; 22 //遊標 23 private int cursor=-1; 24 25 26 /** 27 * 內部類,實現迭代器的功能,迭代器類 28 * @ClassName: myIt 29 * @Description: TODO(這裏用一句話描述這個類的做用) 30 * @author 尚曉飛 31 * @date 2014-7-29 下午7:23:09 32 * 33 */ 34 private class myIt implements Iterator<String>{ 35 /** 36 * 判斷迭代器是否有下一個元素 37 * @Title: hasNext 38 * @Description: TODO(這裏用一句話描述這個方法的做用) 39 * @return 40 * @return boolean 返回類型 41 * @author 尚曉飛 42 * @date 2014-7-29 下午7:09:50 43 */ 44 public boolean hasNext(){ 45 return cursor+1<size; 46 } 47 48 /** 49 * 獲取下一個元素 50 * @Title: next 51 * @Description: TODO(這裏用一句話描述這個方法的做用) 52 * @return 53 * @return String 返回類型 54 * @author 尚曉飛 55 * @date 2014-7-29 下午7:10:36 56 */ 57 public String next(){ 58 cursor++; 59 return str[cursor]; 60 } 61 62 /** 63 * 移除 64 * @Title: remove 65 * @Description: TODO(這裏用一句話描述這個方法的做用) 66 * @return void 返回類型 67 * @author 尚曉飛 68 * @date 2014-7-29 下午7:20:39 69 */ 70 public void remove(){ 71 //沒有實現 72 } 73 } 74 75 76 /** 77 * 容器類中有一個方法,返回本容器的迭代器 78 * @Title: iterator 79 * @Description: TODO(這裏用一句話描述這個方法的做用) 80 * @return 81 * @return Iterator<String> 返回類型 82 * @author 尚曉飛 83 * @date 2014-7-29 下午7:25:29 84 */ 85 public Iterator<String> iterator(){ 86 return new myIt(); 87 } 88 public static void main(String[] args) { 89 //一個容器 90 MyAarryList2 list=new MyAarryList2(); 91 //得到該容器對象的迭代器 92 Iterator<String> iterator=list.iterator(); 93 //測試迭代器 94 while (iterator.hasNext()) { 95 String element=iterator.next(); 96 System.out.println("MyAarryList2.main()"+element); 97 98 } 99 100 } 101 }
第三步:匿名內部類實現迭代器原理測試
1 package com.bjsxt.xiaofei; 2 3 import java.util.Iterator; 4 5 /** 6 * 迭代器底層原理 7 * 方法: 8 * hasNext() 9 * next() 10 * remove() 11 * @ClassName: MyAarryList 12 * @Description: TODO(這裏用一句話描述這個類的做用) 13 * @author 尚曉飛 14 * @date 2014-7-29 下午7:06:09 15 * 16 */ 17 public class MyAarryList3 { 18 //容器底層是數組 19 private String[] str={"a","b","c","d","e","f","g","h"}; 20 //數組的長度 21 private int size=str.length; 22 //遊標 23 private int cursor=-1; 24 25 26 27 28 29 /** 30 * 匿名內部類,實現容器的迭代器功能 31 * @Title: iterator 32 * @Description: TODO(這裏用一句話描述這個方法的做用) 33 * @return 34 * @return Iterator<String> 返回類型 35 * @author 尚曉飛 36 * @date 2014-7-29 下午7:46:44 37 */ 38 public Iterator<String> iterator(){ 39 //new 一個匿名類 40 return new Iterator<String>(){ 41 /** 42 * 判斷迭代器是否有下一個元素 43 * @Title: hasNext 44 * @Description: TODO(這裏用一句話描述這個方法的做用) 45 * @return 46 * @return boolean 返回類型 47 * @author 尚曉飛 48 * @date 2014-7-29 下午7:09:50 49 */ 50 public boolean hasNext(){ 51 return cursor+1<size; 52 } 53 54 /** 55 * 獲取下一個元素 56 * @Title: next 57 * @Description: TODO(這裏用一句話描述這個方法的做用) 58 * @return 59 * @return String 返回類型 60 * @author 尚曉飛 61 * @date 2014-7-29 下午7:10:36 62 */ 63 public String next(){ 64 cursor++; 65 return str[cursor]; 66 } 67 68 /** 69 * 移除 70 * @Title: remove 71 * @Description: TODO(這裏用一句話描述這個方法的做用) 72 * @return void 返回類型 73 * @author 尚曉飛 74 * @date 2014-7-29 下午7:20:39 75 */ 76 public void remove(){ 77 //沒有實現 78 } 79 }; 80 } 81 82 83 public static void main(String[] args) { 84 //一個容器 85 MyAarryList3 list=new MyAarryList3(); 86 //得到該容器對象的迭代器 87 Iterator<String> iterator=list.iterator(); 88 //測試迭代器 89 while (iterator.hasNext()) { 90 String element=iterator.next(); 91 System.out.println("MyAarryList2.main()"+element); 92 93 } 94 95 } 96 }
第四步:加強for循環實現藉助迭代器spa
1 package com.bjsxt.xiaofei; 2 3 import java.util.Iterator; 4 5 /** 6 * 迭代器底層原理 7 * 方法: 8 * hasNext() 9 * next() 10 * remove() 11 * @ClassName: MyAarryList 12 * @Description: TODO(這裏用一句話描述這個類的做用) 13 * @author 尚曉飛 14 * @date 2014-7-29 下午7:06:09 15 * 16 */ 17 public class MyAarryList3 implements java.lang.Iterable<String>{ 18 //容器底層是數組 19 private String[] str={"a","b","c","d","e","f","g","h"}; 20 //數組的長度 21 private int size=str.length; 22 //遊標 23 private int cursor=-1; 24 25 26 27 28 29 /** 30 * 匿名內部類,實現容器的迭代器功能 31 * @Title: iterator 32 * @Description: TODO(這裏用一句話描述這個方法的做用) 33 * @return 34 * @return Iterator<String> 返回類型 35 * @author 尚曉飛 36 * @date 2014-7-29 下午7:46:44 37 */ 38 public Iterator<String> iterator(){ 39 //new 一個匿名類 40 return new Iterator<String>(){ 41 /** 42 * 判斷迭代器是否有下一個元素 43 * @Title: hasNext 44 * @Description: TODO(這裏用一句話描述這個方法的做用) 45 * @return 46 * @return boolean 返回類型 47 * @author 尚曉飛 48 * @date 2014-7-29 下午7:09:50 49 */ 50 public boolean hasNext(){ 51 return cursor+1<size; 52 } 53 54 /** 55 * 獲取下一個元素 56 * @Title: next 57 * @Description: TODO(這裏用一句話描述這個方法的做用) 58 * @return 59 * @return String 返回類型 60 * @author 尚曉飛 61 * @date 2014-7-29 下午7:10:36 62 */ 63 public String next(){ 64 cursor++; 65 return str[cursor]; 66 } 67 68 /** 69 * 移除 70 * @Title: remove 71 * @Description: TODO(這裏用一句話描述這個方法的做用) 72 * @return void 返回類型 73 * @author 尚曉飛 74 * @date 2014-7-29 下午7:20:39 75 */ 76 public void remove(){ 77 //沒有實現 78 } 79 }; 80 } 81 82 83 public static void main(String[] args) { 84 //一個容器 85 MyAarryList3 list=new MyAarryList3(); 86 //得到該容器對象的迭代器 87 Iterator<String> iterator=list.iterator(); 88 //測試迭代器 89 while (iterator.hasNext()) { 90 String element=iterator.next(); 91 System.out.println("MyAarryList2.main()"+element); 92 93 } 94 95 //加強for循環,實現java.lang.Iterable的接口,重寫Interator()方法。其實加強for循環也藉助了迭代器 96 for(String temp:list){ 97 System.out.println("加強for"+temp); 98 } 99 } 100 }