在 Object[] 数组上实现 Java 迭代器和可迭代接口
Implementing the Java Iterator and Iterable Interface over an Object[] array
这是我实现迭代器的内部 class:
public class myIterator implements Iterator<Object> {
private int pos = 0;
public boolean hasNext(){
return pos < arrayPal.length;
}
public Object next(){
return arrayPal[pos++];
}
}
在这个内部 class 所在的 class 中,DynArray,(这是一个对象,它有一个名为 arrayPal 的任何类型对象的内部数组,以及一个布尔值说数组是否可以存储空值)我想为我的添加方法使用迭代器
public void add( T ele ) {
int counter =0;
int tempIndex =0;
if(ele == null && this.allowed == false){
throw new NullPointerException("This array does not accept null values!");
}
else{
myIterator iterator = new myIterator();
Iterator<T> it = this.iterator();
for(Object o: this.arrayPal){
System.out.print(it.hasNext());
if(it.hasNext() == false && (this.arrayPal.length-1) > counter){
arrayPal[counter+1] = ele;
}
else if (it.hasNext() == false && (arrayPal.length-1) == counter){
//expand the array by quanta
//add the the first newest index
Object[] temp = new Object[this.arrayPal.length + quanta];
for(Object b: this.arrayPal){
temp[tempIndex++] = b;
}
temp[this.arrayPal.length] = ele;
this.arrayPal = temp;
}
counter++;
}
}
然而,即使对于我列表中的最后一个元素,.hasNext() 也会一直返回 true。为什么是这样?
此外,它不允许我执行 this.arrayPal.iterator() 它说:
无法对数组类型调用 iterator()
对象[]
为什么不呢?
您的 add
方法获得一个新的 Iterator 并多次调用 it.hasNext()
。它从不调用 it.next()
,因此 Iterator
一直指向数组的第一个元素,而 hasNext()
永远不会 return false(假设数组不为空)。
这是我实现迭代器的内部 class:
public class myIterator implements Iterator<Object> {
private int pos = 0;
public boolean hasNext(){
return pos < arrayPal.length;
}
public Object next(){
return arrayPal[pos++];
}
}
在这个内部 class 所在的 class 中,DynArray,(这是一个对象,它有一个名为 arrayPal 的任何类型对象的内部数组,以及一个布尔值说数组是否可以存储空值)我想为我的添加方法使用迭代器
public void add( T ele ) {
int counter =0;
int tempIndex =0;
if(ele == null && this.allowed == false){
throw new NullPointerException("This array does not accept null values!");
}
else{
myIterator iterator = new myIterator();
Iterator<T> it = this.iterator();
for(Object o: this.arrayPal){
System.out.print(it.hasNext());
if(it.hasNext() == false && (this.arrayPal.length-1) > counter){
arrayPal[counter+1] = ele;
}
else if (it.hasNext() == false && (arrayPal.length-1) == counter){
//expand the array by quanta
//add the the first newest index
Object[] temp = new Object[this.arrayPal.length + quanta];
for(Object b: this.arrayPal){
temp[tempIndex++] = b;
}
temp[this.arrayPal.length] = ele;
this.arrayPal = temp;
}
counter++;
}
}
然而,即使对于我列表中的最后一个元素,.hasNext() 也会一直返回 true。为什么是这样?
此外,它不允许我执行 this.arrayPal.iterator() 它说:
无法对数组类型调用 iterator() 对象[]
为什么不呢?
您的 add
方法获得一个新的 Iterator 并多次调用 it.hasNext()
。它从不调用 it.next()
,因此 Iterator
一直指向数组的第一个元素,而 hasNext()
永远不会 return false(假设数组不为空)。