在Object[]数组上实现Java迭代器和可迭代接口



这是我实现Iterator的内部类:

public class myIterator implements Iterator<Object> {
    private int pos = 0;
    public boolean hasNext(){
        return pos < arrayPal.length;
    }
    public Object next(){
        return arrayPal[pos++];
    }
}

在这个内部类所在的类中,DynArray(它是一个对象,它有一个名为arrayPal的任意类型的内部数组,以及一个布尔值,表示该数组是否可以存储空值)我想为我的add方法使用迭代器

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方法获得一个新的迭代器并多次调用it.hasNext()。它从不调用it.next(),所以Iterator一直指向数组的第一个元素,hasNext()永远不会返回false(假设数组不是空的)。

最新更新