今天看think in java 看到内部类时,有一程序例子是遍历类,但是书上设计的是在这个遍历类中有boolean end()、int next()方法, 所以自己也想实现一个遍历类, 并参考Iterator类, 但是这个类是一个接口,方法中并没有具体的实现,所以参考也是白参考了,既然他不能被参考,那我就在想想其他的办法,遍历的方法基本上有两种:
1、是一个是利用Iterator类
2、在for循环中调用集合的get(int index) 方法获得集合中所装的元素
所以就去找集合中get(int index)方法的源代码, 后来总之有那么一点头绪了。
编写一个遍历器类,类似于Iterator,让他却遍历一数组
模仿Iterator类进行设计, 在遍历器类中, 有一个hasnext() 方法, 另外一个是next()方法, 利用这个遍历器类对数组进行操作,所以考虑将遍历器类设计成一个接口。
package thinkinjava.bianli;
/**
* 编写一个遍历类, 让他遍历一个数组,并对他测试是否正确
* @author zhuhezan
*
*/
public class Test {
Object[] objs = null;
//objs数组的索引
private int index = 0;
Test(int length) {
objs = new Object[length];
}
public boolean add(Object obj) {
//判断当前数组小标有没有超过数组的长度
if (index < objs.length) {
objs[index] = obj;
index ++;
return true;
}
return false;
}
class MyBianLi implements BianLi {
private int i = 0;
@Override
public boolean hasNext() {
// TODO Auto-generated method stub
if (i < objs.length) {
return true;
}
return false;
}
@Override
public Object next() {
// TODO Auto-generated method stub
if (i <objs.length) {
return objs[i++];
}
return null;
}
}
public BianLi getBianLi() {
return new MyBianLi();
}
public static void main(String[] args) {
Test test = new Test(10);
for (int i=0; i<10; i++) {
test.add(i);
}
BianLi bianli = test.getBianLi();
while (bianli.hasNext()) {
Object obj = bianli.next();
System.out.println(obj);
}
}
}
interface BianLi {
boolean hasNext();
Object next();
}