在迭代过程中修改和打印ArrayList

时间:2018-10-11 16:50:20

标签: java collections

我正在尝试同时修改和打印修改后的列表。 以下是示例代码:

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的输出,应如何修改代码?

2 个答案:

答案 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循环在每次迭代中将isize()进行比较,并且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