迭代器遍历数组删除长度固定的字符串???

wo定义了一个Collection类型的集合,存储以下字符串:
   “JavaEE企业级开发指南”,”Oracle高级编程”,
   ”MySQL从入门到精通”,”Java架构师之路”

 

使用迭代器遍历所有元素,筛选书名小于10个字符的,并打印;

请看我的代码:

 public static void main(String[] args) {
        Collection<String> list = new ArrayList<>();

        list.add("JavaEE企业级开发指南");
        list.add("Oracle高级编程");
        list.add("MySQL从入门到精通");
        list.add("Java架构师之路");

        Iterator<String> iterator = list.iterator();
        while (iterator.hasNext()){
                if(iterator.next().length()>10){
                    iterator.remove();
                }
                System.out.println(iterator.next());
            }
        
            

它的结果是:

这明显不对,不是我要的,我就去改,然后就是这个问题的原因所在了,我改了while循环,请看:

  while (iterator.hasNext()) {
            String s = iterator.next();
            if (s.length() > 10) {
                System.out.println(s);
            }


/*结果是:
------------
JavaEE企业级开发指南
MySQL从入门到精通*/


//然后我改了输出语句的s

  while (iterator.hasNext()) {
            String s = iterator.next();
            if (s.length() > 10) {
                System.out.println(iterator.next());
            }

/*
它的结果就变成了:
------------
Oracle高级编程
Java架构师之路
*/


我寻思这两不是同一个意思吗,怎么会造成这种错误的???

 

你直接输出下一个结果怎么会一样呢

// 这里判断后面是否还有值
while (iterator.hasNext()){
            // 获取下一个值
            String s = iterator.next();
            if(s.length()>10){
                iterator.remove();
            } else {
                System.out.println(s);
            }
        }

说实话,你的需求有点稀里糊涂。你到底是要删除长度大于10的元素,打印<=10的元素,还是仅仅打印小于10的。