在 Object[] 数组上实现 Java Iterator 和 Iterable 接口

Posted

技术标签:

【中文标题】在 Object[] 数组上实现 Java Iterator 和 Iterable 接口【英文标题】:Implementing the Java Iterator and Iterable Interface over an Object[] array 【发布时间】:2015-12-13 11:57:34 【问题描述】:

这是我实现迭代器的内部类:

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。为什么是这样?

另外,它不允许我这样做。它说:

无法在数组类型上调用 iterator() 对象[]

为什么不呢?

【问题讨论】:

目前尚不清楚迭代器应该如何与 add 方法相关联。此外,您不能将 Java 中的方法添加到您无法控制的类型,包括 Object[]。您只能将方法添加到例如像DynArray 这样你写的类。 你从不打电话给it.next() - 这是故意的吗? 什么时候调用 it.next()?这会导致迭代器迈出一步吗? 【参考方案1】:

您的add 方法获得一个新的迭代器并多次调用it.hasNext()。它从不调用it.next(),因此Iterator 一直指向数组的第一个元素,hasNext() 永远不会返回false(假设数组不为空)。

【讨论】:

以上是关于在 Object[] 数组上实现 Java Iterator 和 Iterable 接口的主要内容,如果未能解决你的问题,请参考以下文章

如何在对象上实现 GetHashCode()? [复制]

在Array的原型上实现数组的去重

Swift 5:在使用协议实现 Equatable 的结构上实现通用数组操作

怎样在python上实现冒泡排序整数数组结果升序输出?

如何在受保护的 java 类上实现接口

消息:count():参数必须是在centos上实现Countable codeigniter的数组或对象