繁体   English   中英

使用 Iterator 遍历列表时出现 StackOverflowError

[英]StackOverflowError when using Iterator to iterate through a list

我正在尝试在列表上实现一个 toArray() 方法。 最初我收到一个错误,说在使用 for each 循环时我只能迭代数组或 java.lang.iterable 的实例,所以我做了一些研究并尝试使用迭代器。 但是,现在看起来它陷入了递归循环之类的事情中(我认为)。 这是我遇到问题的代码部分:

public Object[] toArray(){
    Object[] arr = new Object[this.size()]
    int i = 0;
    for(E e: this){
        arr[i] = e;
        i++;
    }
    return arr;
}

@Override
public Iterator<E> iterator() {
    return this.iterator();
}

我已经将范围缩小到如何定义我的public Iterator<E> iterator()方法,因为如果我在 foreach 循环中使用其他值而不是this值,程序就可以正常工作。 我得到的错误是Exception in thread "main"java.lang.StackOverflowError at arrayIndexList.ArrayIndexList.iterator(ArrayIndexList.java:158)一再重复,但不是无限循环,因为它终止. 当我单击ArrayIndexList.java:158它会带我return this.iterator()代码中的return this.iterator() 我在这里缺少什么?

首先,您需要将Class<E>传递给您的构造函数并保存它,以便您可以在toArray()正确构造您的数组类型 - 并返回一个E[] 然后你可以用一个List包装它并返回它的iterator() 喜欢,

private Class<E> cls; // <-- make sure you assign this in your constructor

public E[] toArray() {
    E[] arr = Array.newInstance(cls, this.size()); // <-- here is how you get an E[]
    int i = 0;
    for (E e : this) {
        arr[i] = e;
        i++;
    }
    return arr;
}

@Override
public Iterator<E> iterator() {
    return Arrays.asList(this.toArray()).iterator();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM