007Java集合011遍历集合元素并修改

注意:本文基于JDK1.8进行记录。

1 遍历Collection

对List和Set的遍历,有四种方式,下面以ArrayList为例进行说明。

1.1 普通for循环

使用普通for循环的遍历方式效率最高,尽量将循环无关的代码放置在集合外执行。

代码如下:

for (int i = 0; i < list.size(); i++) {
    System.out.println(i);
}

如果要在普通for循环里对集合元素进行删除操作,可能会出现问题:

public static void main(String[] args) {
    List list = new ArrayList();
    list.add(1);
    list.add(2);
    list.add(2);
    list.add(4);
    list.add(5);
    for (int i = 0; i < list.size(); i++) {
        if (list.get(i) == 2) {
            list.remove(i);
        }
    }
    System.out.println(list);
}

运行结果如下:

[1, 2, 4, 5]

结果说明:

集合中有两个值为2的元素,但是在代码执行之后,值为2的元素并没有完全移除。

在第一次删除后,集合发生了改变,删除位置之后的所有元素都向前挪动了一个位置,删除位置上的元素由下一位置上的元素替代。

在下次遍历时,从删除位置后开始判断,跳过了删除位置上的元素,从而导致最后打印的结果和预期的不一致。

改进的办法是在删除之后设置索引减1,重新判断删除位置上的元素。

1.2 增强for循环

进一步精简了遍历的代码,底层使用迭代器。

代码如下:

for (Integer i : list) {
    System.out.println(i);
}

如果在增强for循环里删除或者添加集合

你可能感兴趣的:(Java学习笔记,java)