手动实现迭代器
一、实现迭代器中的hasNext和next方法:
/**
* 简化迭代器原理
* hasNext
* next
* @author qiao39gs
*
*/
public class MyArrayList {
private String[] elem = {"a","b","c","d","e","f","g"};
private int size = elem.length;
private int cursor = -1;
/**
* 判断是否存在下一个元素
* @return
*/
public boolean hasNest(){
return cursor+1<size;
}
/**
* 获取下一个元素
* @return
*/
public String next(){
cursor++; //移动一次
return elem[cursor];
}
//删除元素
public void remove(){
}
public static void main(String[] args) {
MyArrayList list = new MyArrayList();
while(list.hasNest()){
System.out.println(list.next());
}
}
}
二、加入接口 提供方法:
import java.util.Iterator;
/**
* 简化迭代器原理 加入接口 提供方法
* hasNext
* next
* @author qiao39gs
*
*/
public class MyArrayList2 {
private String[] elem = {"a","b","c","d","e","f","g"};
private int size = elem.length;
private class MyIt implements Iterator<String>{
private int cursor = -1;
/**
* 判断是否存在下一个元素
* @return
*/
public boolean hasNext(){
return cursor+1<size;
}
/**
* 获取下一个元素
* @return
*/
public String next(){
cursor++; //移动一次
return elem[cursor];
}
//删除元素
public void remove(){
//没有实现
}
}
public Iterator<String> iterator(){
return new MyIt();
}
public static void main(String[] args) {
MyArrayList2 list = new MyArrayList2();
Iterator<String> it = list.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
}
}
三、创建匿名内部类
import java.util.Iterator;
/**
* 简化迭代器原理 加入接口 提供方法
* hasNext
* next
* @author qiao39gs
*
*/
public class MyArrayList3 {
private String[] elem = {"a","b","c","d","e","f","g"};
private int size = elem.length;
/**
* 匿名内部类
* @return
*/
public Iterator<String> iterator(){
return new Iterator<String>(){
private int cursor = -1;
/**
* 判断是否存在下一个元素
* @return
*/
public boolean hasNext(){
return cursor+1<size;
}
/**
* 获取下一个元素
* @return
*/
public String next(){
cursor++; //移动一次
return elem[cursor];
}
//删除元素
public void remove(){
//没有实现
}
};
}
public static void main(String[] args) {
MyArrayList3 list = new MyArrayList3();
Iterator<String> it = list.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
}
}
四、实现for的迭代器
import java.util.Iterator;
public class MyArrayList3 implements java.lang.Iterable<String>{
private String[] elem = {"a","b","c","d","e","f","g"};
private int size = elem.length;
/**
* 匿名内部类
* @return
*/
public Iterator<String> iterator(){
return new Iterator<String>(){
private int cursor = -1;
/**
* 判断是否存在下一个元素
* @return
*/
public boolean hasNext(){
return cursor+1<size;
}
/**
* 获取下一个元素
* @return
*/
public String next(){
cursor++; //移动一次
return elem[cursor];
}
//删除元素
public void remove(){
//没有实现
}
};
}
public static void main(String[] args) {
MyArrayList3 list = new MyArrayList3();
Iterator<String> it = list.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
//增强for,必须实现java.lang.Iterable接口,重写iterator方法
for(String temp:list){
System.out.println(temp);
}
}
}