Java 关于迭代器接口迭代的列表中指针初始位置的混淆

Java 关于迭代器接口迭代的列表中指针初始位置的混淆,java,Java,其中是指向列表的指针的初始索引,如果不是这样的话 是列表的第一项 下一种方法是什么 (1) 返回的下一个元素,并指向下一个元素 或 (2) 返回原始元素并设置指向下一个元素的指针 但如果(1)为真,则指针位于第一个元素上,则无法返回第一个元素,即如果(1)为真,则指针应位于第一个元素之前,即 某种-1位置 另一方面,如果(2)为真,那么我们可以删除第一个元素,但是我们不能通过使用next获得下一个元素,因为我们将把索引减少1 这就引出了下一个问题:remove()方法是将索引减少1还是保持不变

其中是指向列表的指针的初始索引,如果不是这样的话 是列表的第一项

下一种方法是什么

(1) 返回的下一个元素,并指向下一个元素 或 (2) 返回原始元素并设置指向下一个元素的指针

但如果(1)为真,则指针位于第一个元素上,则无法返回第一个元素,即如果(1)为真,则指针应位于第一个元素之前,即 某种-1位置

另一方面,如果(2)为真,那么我们可以删除第一个元素,但是我们不能通过使用next获得下一个元素,因为我们将把索引减少1

这就引出了下一个问题:remove()方法是将索引减少1还是保持不变

上下文代码如下所示:

package iterators;
import java.util.ArrayList;
import java.util.Iterator;
public class Array_practice {
    public static void main(String args[])
    {
        ArrayList<Integer> list= new ArrayList<Integer>();
        list.add(1);
        list.add(2);
        list.add(3);
        Iterator<Integer> iterator= list.iterator();
        iterator.remove();//does not work why??

    }

} 
包迭代器;
导入java.util.ArrayList;
导入java.util.Iterator;
公共类数组的实践{
公共静态void main(字符串参数[])
{
ArrayList=新建ArrayList();
增加第(1)款;
增加(2);
增加(3);
迭代器迭代器=list.Iterator();
迭代器.remove();//不起作用为什么??
}
} 
其中是指向列表的指针的初始索引(如果不是列表的第一项)

不,它在列表的第一项之前。只有在第一次调用
next()
时,才能访问第一项

事实上,通常更容易将迭代器视为项目之间的迭代器。例如,在您的列表中:

  1   2   3
^              // Initial position
    ^          // After calling next()
        ^      // After calling next()
            ^  // After calling next() the third time - now hasNext() will return
               // false
然后,如文件所述,删除上次返回的项目


在返回任何项目之前,您正在调用
remove()
。。。因此没有什么可删除的。

迭代器接口的Javadoc如下所示:

作废删除()

从基础集合中移除此迭代器返回的最后一个元素(可选操作)。每次调用next()时只能调用此方法一次。如果在迭代过程中以除调用此方法以外的任何方式修改了基础集合,则迭代器的行为是未指定的


因此,在调用next()之前使用remove()将永远不会返回元素。当然,如果您迭代的类遵守了实现Iterable的约定,这是很明显的,ArrayList和其他java.util集合就是这样

你能加一些换行符吗?用这样的文体写很难理解。