java - 迭代器困惑

标签 java iterator queue

我在整个迭代器概念上遇到了一些麻烦,对于我的一个测验中的一个问题,老实说我无法理解发生了什么。

public static void main(String[] args)
{   
    Deque<String> SQ1 = new ArrayDeque<String>();

     SQ1.add("Give");
     SQ1.add("Me");
     SQ1.add("The");
     SQ1.add("Best");
     SQ1.add("Of");
     SQ1.add("Both");
     SQ1.add("Worlds");
     Iterator<String> It = SQ1.iterator();

     while(It.hasNext())
     {
         if(It.next().equals("Give"))
             System.out.print(It.next());
     }
}

这是代码,问题是输出是什么。正确答案是"Me"当我以为是"Give"时。我不明白整个运行过程是怎样的。

我的理解是这样的: 它确实有一个 next 。如果是next等于 "Give" ,它会打印出next值(value)。在这种情况下,该值应该是“Give”,不是吗?

有人可以帮我理解这一点吗?

最佳答案

if 语句调用 It.next() 检查值,print 语句再次调用 It.next() ,而不是打印您刚刚检查的值。

因此,您看到的始终是紧接在“Give”之后的元素。

关于java - 迭代器困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34274217/

相关文章:

Python 迭代器和 zip

C++ std::vector<std::string> 迭代器段错误

laravel-4 - Laravel 作业和保留状态或保留队列

java - Spring Cacheable 使用 varArgs 产生 ArrayIndexOutOfBoundsException

java - 如何制作递归函数以查找图中的所有欧拉路径?

java - For Each 循环有效,但迭代器无效

c++ - Mac High Sierra 上 C++ 中的段错误 11

java - 使用 Java 对队列进行快速排序

java - 具有基本 HTTP 身份验证的 CORS

jquery - Jquery 可以知道我的 gif 动画何时结束吗?