【问题标题】:2 Forms of Java IteratorJava迭代器的2种形式
【发布时间】:2015-01-09 03:36:00
【问题描述】:

我试图遍历一个列表“ret”,它是一个整数列表。即“ret”的类型为List<List<Integer>>,所以我使用了如下代码:

for (ListIterator<List<Integer>> it1 = ret.listIterator<>(); it1.hasNext(); ) {
    List<Integer> list1 = it1.next();
}

但是,IDE 给我一个错误“表达式的非法开始”。于是我尝试了下面的表格,它是正确的:

for (ListIterator it1 = ret.listIterator(); it1.hasNext(); ) {
    List<Integer> list1 = (List<Integer>) it1.next();
}

不知道为什么会这样,这两种形式有什么区别?

【问题讨论】:

  • ret.listIterator(); 中有错字吗?那些 不应该在那里。

标签: java list linked-list iterator


【解决方案1】:

尝试改变这个:

for (ListIterator<List<Integer>> it1 = ret.listIterator<>(); it1.hasNext(); ) {
    List<Integer> list1 = it1.next();
}

到这里:

for (ListIterator<List<Integer>> it1 = ret.listIterator(); it1.hasNext(); ) {
    List<Integer> list1 = it1.next();
}

然后你就不需要显式转换了。尖括号不用于调用返回迭代器的函数,见API:http://docs.oracle.com/javase/7/docs/api/java/util/ListIterator.html

这段代码为我编译并运行:

import java.util.List;
import java.util.ListIterator;
import java.util.ArrayList;

public class Test{
public static void main(String[] a){

List<List<Integer>> ret = new ArrayList<>();

for (ListIterator<List<Integer>> it1 = ret.listIterator(); it1.hasNext(); ) {
    List<Integer> list1 = it1.next();
}

}}

【讨论】:

    【解决方案2】:

    http://docs.oracle.com/javase/7/docs/api/java/util/ListIterator.html

    “ListIterator 没有当前元素;它的光标位置始终位于调用 previous() 将返回的元素与调用 next() 将返回的元素之间。”

    安静简单 迭代器不是列表,不要混淆它们。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-01
      • 1970-01-01
      • 2010-10-28
      • 1970-01-01
      • 2012-03-23
      • 2014-03-25
      相关资源
      最近更新 更多