在java中创建迭代器的问题

在java中创建迭代器的问题,java,iterator,Java,Iterator,我试图创建一个迭代器类来完成我认为是两个简单方法的工作,但我想创建迭代器时遇到了一些问题。我创建迭代器的那一行给了我一个编译错误,说“迭代器是抽象的;不能实例化”。我不太清楚这意味着什么,很明显我做错了什么。我也把方法的目的放在上面,如果你发现它们有什么问题,请告诉我。谢谢你的意见 import java.util.Iterator; private class OrderedListIterator{ Iterator<E> it = new Iterator<E>

我试图创建一个迭代器类来完成我认为是两个简单方法的工作,但我想创建迭代器时遇到了一些问题。我创建迭代器的那一行给了我一个编译错误,说“迭代器是抽象的;不能实例化”。我不太清楚这意味着什么,很明显我做错了什么。我也把方法的目的放在上面,如果你发现它们有什么问题,请告诉我。谢谢你的意见

import java.util.Iterator;
private class OrderedListIterator{
  Iterator<E> it = new Iterator<E>();

    //return true if iterator has more items
    public boolean hasNext(){
     boolean found = false;
     if(it.hasNext == true)
        found = true;
        return found;
     return found;    
    }

    //return next item in the iterator  
    public E getNext(){
     if(it.hasNext != false)
        return it.next;
    }

    //prints out message
    public void remove(){
        System.out.println("Operation not supported");
    }
}
import java.util.Iterator;
私有类OrderedListIterator{
迭代器it=新迭代器();
//如果迭代器有更多项,则返回true
公共布尔hasNext(){
布尔值=false;
if(it.hasNext==true)
发现=真;
发现退货;
发现退货;
}
//返回迭代器中的下一项
公共E getNext(){
if(it.hasNext!=false)
把它还给我;
}
//打印消息
公共空间删除(){
System.out.println(“不支持操作”);
}
}

出现此错误的原因是迭代器是一个接口

private class OrderedListIterator implements Iterator<E>
在Java编程语言中,接口是引用类型, 类似于类,它只能包含常量、方法 签名、默认方法、静态方法和嵌套类型。方法 实体仅存在于默认方法和静态方法中。接口 无法实例化它们只能由类或 由其他接口扩展。本文后面将讨论扩展 教训

来自Java文档

接口包含方法的定义,而不是实现,这就是为什么不能创建或调用接口或其方法的原因。迭代器接口有两种方法;hasNext()和next()。您的代码看起来像是要实现迭代器接口

private class OrderedListIterator implements Iterator<E>
私有类OrderedListIterator实现迭代器
在hasNext和next方法中,您需要迭代OrderedList,具体取决于您实现它的方式

下面是我之前创建的ArrayList的迭代器示例

private class ArrayIterator implements Iterator<E> {
    private int arrayIndex = 0;

    /**
     * Checks if the set has a next value.
     * 
     * @return true if there is a next value, else false
     */
    public boolean hasNext() {
        //Checks that the index is within the size of the ArrayList
        return arrayIndex < size;
    }

    /**
     * Gets the next value in the iteration.
     * 
     * @return 
     *      The next value in the list
     * @throws NoSuchElementException
     *      if there is no next element in the list
     */
    public E next() throws NoSuchElementException {
        if (arrayIndex == size) {
            throw new NoSuchElementException();
        }
        //Checks the ArrayList's data at the current index
        return data[arrayIndex++];
    }
}
私有类ArrayIterator实现迭代器{
私有int数组索引=0;
/**
*检查集合是否具有下一个值。
* 
*@如果有下一个值,则返回true,否则返回false
*/
公共布尔hasNext(){
//检查索引是否在ArrayList的大小范围内
返回数组索引<大小;
}
/**
*获取迭代中的下一个值。
* 
*@返回
*列表中的下一个值
*@NoSuchElementException
*如果列表中没有下一个元素
*/
public E next()抛出NoTouchElementException{
if(arrayIndex==大小){
抛出新的NoTouchElementException();
}
//在当前索引处检查ArrayList的数据
返回数据[arrayIndex++];
}
}
您的私有类可以从其周围的类访问字段。在我的示例中,迭代器在数组中存储索引(类似于内部游标),并在当前索引处检查ArrayList的数据。每次调用下一个方法时,下一次的索引都会增加


如果OrderedList类类似于LinkedList并具有节点,则应保存对该节点的引用,每次调用下一个方法时,都会返回该节点,然后将光标更改为下一个节点。

您希望它迭代什么?是的,如果类是抽象类或接口类,则无法创建该类的对象。但是您可以相应地扩展或实现它们。本主题将有助于我猜@AndyTurner链接列表您的问题之一是输入错误-您需要在两种情况下调用
hasNext
方法。