列表是Java中使用最多的数据结构之一,列表的循环也是经常会使用的操作,这是我最近在对列表循环的时候遇到的一个问题,在此记录下来。
问题代码
1 | public class ArrayTest { |
预期结果:
[a, b, c, d]
[]
实际结果:
[a, b, c, d]
[b, d]
根据逻辑来说,对列表进行循环,循环中移除每一个元素,看似是没有问题的,但是这里忽略了一个问题,那就是在移除元素的过程中,数组的大小其实已经变化了,实际上并没有遍历所有的元素,某些元素是被跳过了。
还有几个错误示范
1 | for (Character character : list) { |
1 | Iterator<Character> iterator = list.iterator(); |
这两种方式用来移除列表中的元素都是会抛出ConcurrentModificationException异常的,故不可取。
正确操作
应对这个问题,我们可以使用迭代器来实现列表的删除元素操作。
1 | Iterator<Character> iterator = list.iterator(); |
利用迭代器的iterator.remove()方法,我们就可以正常移除列表中的元素啦。