public class MyIterator {
//测试主函数
public static void main(String[] args) {
List<String > nameList=new ArrayList<String>();
nameList.add("zhangsan");
nameList.add("lisi");
nameList.add("wangwu");
nameList.add("zhaoliu");
IIterator<String> it=nameList.iterator();
while (it.hashNext()) {
String string = (String ) it.next();
System.out.println(string);
}
System.out.println("<------------分割线------------->");
for(int i=0;i<nameList.size();i++){
System.out.println(nameList.get(i));
}
}
}
// 迭代器角色接口
interface IIterator<T> {
public boolean hashNext();// 判断是否有下一个元素
public T next();// 获取下一个元素的内容
}
// 创建一个类来实现自定义IIterator这个接口
class MyIterator1<T> implements IIterator<T> {
private List<T> list = null;// MyIterator1有一个List接口的属性
private int index = 0;// 访问到容器中元素的当前下标
// 创建一个迭代器对象的时候接收要被迭代的具体的容器对象
public MyIterator1(List<T> list) {
this.list = list;
}
// 实现接口方法
// 判断是否有下一个元素
@Override
public boolean hashNext() {
return index < list.size();
}
// 取出下一个元素
@Override
public T next() {
return (T) list.get(index++);
}
}
// 定义一个容器接口
interface List<T> {
public void add(T obj);// 给具体的容器添加元素
public T get(int index);// 获取指定位置上的元素
public int size();// 获得容器中的元素个数
public IIterator<T> iterator();// 得到具体的迭代器对象
}
// 定义一个泛型类实现List接口
class ArrayList<T> implements List<T> {
private Object[] obj = null;// 声明一个Objiect类型的数组
private int index;// 数组的下标
private int size;// 记录数组中元素的个数
public ArrayList () {
obj=new Object[10];//给数组设定一个值是固定的,不让数组超过数组的容量
index=0;
size=0;
}
@Override
public void add(T obj) {
this.obj[index++]=obj;//把数据存放到数组中
size++;//元素的个数加一
}
@SuppressWarnings("unchecked")//添加一个压制警告就不会出现警告,处女座情节
@Override
public T get(int index) {
return (T) this.obj[index];
}
@Override
public int size() {
return size;
}
@Override
public IIterator<T> iterator() {
return new MyIterator1<T>(this);
}
}