Java iterable列表是否因操作而改变?
我有自己编码的iterable类,我在演示部分创建了一个iterable列表。这些方法包含在我的类中Java iterable列表是否因操作而改变?,java,list,iterator,Java,List,Iterator,我有自己编码的iterable类,我在演示部分创建了一个iterable列表。这些方法包含在我的类中 public void add(E e); public Node<E> next(); public void hasNext(); public Node<E> previous(); 现在,我们有一个可比较的列表 OwnIterator ite = list.ownIterator(); 然后,我将继续列表并进行一些操作。(此处光标指向0.index) 1-是否
public void add(E e);
public Node<E> next();
public void hasNext();
public Node<E> previous();
现在,我们有一个可比较的列表
OwnIterator ite = list.ownIterator();
然后,我将继续列表并进行一些操作。(此处光标指向0.index)
1-是否应该返回7而不是8
2-当光标指向8时调用previous()会怎么样?它返回7还是11?我这里的主要问题是iterable list上的操作是否会影响当前iterable list?总是这样吗
2-11-8-9-20
或者新添加的元素出现在iterable列表中?好吧,因为您正在实现自己的迭代器,所以您可以做任何对您有意义的事情 如果您希望迭代器符合
java.util.ListIterator
的约定(您必须选择ListIterator
,因为java.util.iterator
在迭代集合时添加元素时有未指定的行为),您可以遵循以下逻辑:
void java.util.ListIterator.add(E)
将指定的元素插入列表(可选操作)。该元素紧跟在next返回的元素之前(如果有),紧跟在previous返回的元素之后(如果有)。(如果列表不包含任何元素,新元素将成为列表上的唯一元素。)新元素将插入隐式光标之前:后续调用next将不受影响,后续调用previous将返回新元素。(此调用将调用nextIndex或previousIndex返回的值增加一倍。)
OwnIterator ite = list.ownIterator();
ite.next(); // by this method cursor points out the element at the index 1
ite.next(); // cursor shifts to 2. index
ite.add("7");
//list is 2 -- 11 -- 7 -- 8 -- 9 -- 20 // when we call next() after add(), it returns 8 not 7;