【发布时间】:2010-12-26 11:18:59
【问题描述】:
假设我有一个简单的 MyArray 类,它有两个简单的方法:添加、删除和迭代器。在 main 方法中,我们可以看到它应该如何使用:
public class MyArray {
int start;
int end;
int[] arr;
myIterator it;
public MyArray(){
this.start=0;
this.end=0;
this.arr=new int[500];
it=new myIterator();
}
public void add(int el){
this.arr[this.end]=el;
this.end++;
}
public void delete(){
this.arr[this.start]=0;
this.start++;
}
public static void main(String[] args){
MyArray m=new MyArray();
m.add(3);
m.add(299);
m.add(19);
m.add(27);
while(m.it.hasNext()){
System.out.println(m.it.next());
}
}
然后应该以某种方式实现 MyIterator:
import java.util.Iterator;
public class myIterator implements Iterator{
@Override
public boolean hasNext() {
// TODO Auto-generated method stub
return false;
}
@Override
public Object next() {
// TODO Auto-generated method stub
return null;
}
@Override
public void remove() {
// TODO Auto-generated method stub
}
}
MyIterator 应该从 MyArray 类中迭代 arr,从 start 到 end 值;两者也是 MyArray 的属性。那么,既然 MyIterator 应该使用 MyArray 属性,那么 MyIterator 应该如何实现呢?也许我可以在初始化时发送当前对象:
it=new myIterator(this);
但我想这不是最好的灵魂。或者也许 MyArray 本身应该实现 Iterator 接口?这是怎么解决的?
编辑:
好的,谢谢大家。这是我要做的一个简单示例,所以不要关心固定长度的数组。我真正想做的是循环 FIFO,这就是为什么 start 和 end 是光标。
此循环 FIFO 将是一个整数对数组,例如大小为 300:int[][] arr=new int[300][2]。
在迭代循环数组时,我必须注意计数器是否到达末尾并使其从头开始,所以这就是我解决它的方法:
if (this.start >= this.end ) temp_end=this.end+this.buff.length;
else temp_end=this.end;
int ii;
int j=0;
int[] value=new int[2];
for(int i=this.start; i<temp_end; i++){
ii=i% this.arr.length;
value=this.buff[ii];
//do anything with value
}
但是我想避免担心这些事情,只是以一种简单的方式进行迭代,我可以使用迭代器接口来做到这一点,但是我有两个问题:第一个我已经解释过并且已经被许多答案解决了,第二个是我的数组是由成对的整数组成的,我不能将迭代器与原始类型一起使用。
【问题讨论】: