java - 常见迭代器错误的解释

标签 java collections iterator

import java.io.*;
import javax.swing.JOptionPane;
import java.util.*;

public class lesson {
     static void printAll(ArrayList<String> names, int len)
      {
         Iterator it = names.iterator();
         while( it.hasNext() )
         {
         if( ((String)it.next()).length() == len)
         System.out.println( it.next() );
         }
      }
    public static void main(String[] args) throws IOException {
        ArrayList<String> names = new ArrayList<String>();
        names.add("Jan");
        names.add("Ivan");
        names.add("Tom");
        names.add("George");
        printAll(names,3);
    }
}

为什么输出 Ivan, George, 不应该只打印长度为 3 的名字(Jan 和 Tom)?

最佳答案

if( ((String)it.next()).length() == len)
         System.out.println( it.next() );
         }

it.next() 将迭代器前进到一个元素。您正在执行 it.next() 两次。

if( ((String)it.next()).length() == len) 前进一次,现在迭代器指向 next()

将其更改为如下所示:

 it.next() prints next() element in iterator.
      {
       //Get once.
        String nextName = (String)it.next();
         if( nextName .length() == len)
         System.out.println(nextName  );
       }

关于java - 常见迭代器错误的解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13166908/

相关文章:

c# - 简化在 Java 中编写自定义迭代器

java - 获取字节数组 X 位置位的方法

java - 为什么阻塞库方法经常通过调用静态interrupted()而不是实例方法isInterrupted()来响应中断?

collections - 我如何通过其中一个字段索引一组记录?

c++ - std::multimap 获取两个范围

使用 STL 算法与容器(char * 除外)进行 C++ 二进制文件 I/O

java - Hibernate 注释与集合

java - 乘法后得到最后 2 位数字

angular - typescript 对象集

java - 如何通过流计算值