在删除Java中的元素时迭代LinkedList

时间:2012-09-22 12:15:00

标签: java iterator linked-list

我想做这样的事情:

int[][] A = ... // initialize matrix
List<Integer> rows = new LinkedList<Integer>();
for (int r = 0; r < 1000000; r++) rows.add(r);
Iterator<Integer> iter = rows.iterator();
for ( ; iter.hasNext(); ) {
    // some condition based on which I remove an element
    if (200 != A[iter.next().intValue()][0]) iter.remove();
}
if (rows.isEmpty()) {
    System.out.println("empty");
}

但它不起作用。

2 个答案:

答案 0 :(得分:2)

您很可能获得ArrayIndexOutOfBoundsException。这是因为值A[iter.next().intValue()]已超出initialize matrix部分中设置的行边界。

假设你有行,你可以使用:

for (int r = 0; r < A[0].length; r++) {
...

答案 1 :(得分:0)

这对我有用:

public class Test { 

    public static void main(String args[]) {
        int[][] A = new int[1000000][1];
        List<Integer> rows = new LinkedList<Integer>();
        for (int r = 0; r < 1000000; r++) rows.add(r);
        Iterator<Integer> iter = rows.iterator();
        for ( ; iter.hasNext(); ) {
            // some condition based on which I remove an element
            if (200 != A[iter.next().intValue()][0]) iter.remove();
        }
        if (rows.isEmpty()) {
            System.out.println("empty");
        }
    }
}

并打印empty