我正在尝试同时修改和打印修改后的列表。 以下是示例代码:
public class Test {
static List<Integer> l = new ArrayList<Integer>()
{{
add(1);
add(2);
add(3);
add(4);
add(5);
}};
public static void main(String args[])
{
performTask();
}
private static void performTask()
{
int j = 0;
ListIterator<Integer> iter = l.listIterator();
while(iter.hasNext())
{
if(j == 3)
{
iter.add(6);
}
System.out.println(l.get(j));
iter.next();
++j;
}
}
}
我期望输出为1,2,3,6,4,5
,但输出为1,2,3,6,4
。另外,如果我想获取为1,2,3,4,5,6
的输出,应如何修改代码?
答案 0 :(得分:3)
在这种情况下,我实际上会放弃Iterator
。
而是尝试这样的代码:
List<Integer> list = ...;
for (int index = 0; index < list.size(); index++) {
final Integer val = list.get(index);
// did you want to add something once you reach an index
// or was it once you find a particular value?
if (index == 3) {
// to insert after the current index
list.add(index + 1, 6);
// to insert at the end of the list
// list.add(6);
}
System.out.println(val);
}
由于for循环在每次迭代中将i
与size()
进行比较,并且size()
在将元素添加到列表中时进行了更新,因此可以正确打印添加到其中的新内容列表(只要将它们添加到当前索引之后)。
答案 1 :(得分:1)
xtratic的答案主题很出色(竖起大拇指),它说明了要满足OP的要求需要做的事情,但是代码不能很好地完成工作,因此请发布此代码,这正是OP想要的,
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
list.add(5);
for (int index = 0; index < list.size(); index++) {
final Integer val = list.get(index);
if (index == 3) { // index doesn't have to be compared with 3 and instead it can be compared with 0, 1 or 2 or 4
list.add(5, 6); // we need to hardcodingly add 6 at 5th index in list else it will get added after 4 and will not be in sequence
}
System.out.println(val);
}
这将输出以下顺序,
1
2
3
4
5
6
在for循环中,如果执行此操作,
list.add(index+1, 6);
然后它产生错误的序列,因为在第4个索引处添加了6。
1
2
3
4
6
5