在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
方法。