速记
Arraylist Iterator遍历方法
定义
迭代器模式(Iterator),提供一种方法顺序访问一个聚合对象中的各种元素,而又不暴露该对象的内部表示。
场景
(1)访问一个聚合对象的内容而无需暴露它的内部表示
(2)支持对聚合对象的多种遍历
(3)为遍历不同的聚合结构提供一个统一的接口
类图
实现
(com.haiwei.behavior.iterator)
迭代器接口
public interface HaiweiIterator {
boolean hasNext();
String next();
}
List的接口
public interface HaiweiList {
HaiweiIterator iterator();
void add(String val);
}
具体List类
public class MyList implements HaiweiList {
//记录修改的次数
private int modeCount = 0;
//记录List的最大长度
private int capcity = 10;
//当前列表的大小
private int size = 0;
//记录数据
private String [] list = new String[capcity];
public HaiweiIterator iterator() {
return new MyIterator();
}
public void add(String val) {
list[size++] = val;
modeCount ++;
}
/**
* 迭代器应该是MyList的内容类
* 除了MyList其他都没法创建
*/
private class MyIterator implements HaiweiIterator {
//当前元素位置指针
private int currentpoit = -1;
//修改次数
private int tempModeCount = -1;
public MyIterator(){
currentpoit = 0;
//在创建迭代器的时候记录当前列表修改的次数
tempModeCount = modeCount;
}
public boolean hasNext() {
return currentpoit < size;
}
public String next() {
//如果遍历的过程中修改了列表就报错
if(modeCount != tempModeCount){
throw new RuntimeException("列表已经修改");
}
return list[currentpoit++];
}
}
}
调用类
public class Test1 {
public static void main(String[] args) {
MyList list = new MyList();
list.add("111");
list.add("222");
list.add("333");
HaiweiIterator iterator = list.iterator();
while(iterator.hasNext()){
System.out.println(iterator.next());
}
}
}