当我们想要删除ArrayList中的元素时,往往会遍历下标直接删除,对于基本数据类型的数组来说,没有什么
问题,但对于数组大小可变的集合来讲,有时就会出错。
如下:
List list = new ArrayList<>();
// 初始化list
for (int i=0; i<10; i++)
list.add(i);
System.out.println(Arrays.toString(list.toArray()));
// 输出 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
当我们想要删除某些元素时,往往这样写。
// 刪除元素8-9
for (int i = 8; i < list.size(); i++)
{
ist.remove(i);
}
System.out.println(Arrays.toString(list.toArray()));
// 输出 [0, 1, 2, 3, 4, 5, 6, 7, 9],
很显然,结果不是我们想要的,这是因为在删除元素的过程中数组大小改变了。
有两种方法可以正常删除集合中的元素:
1. 在删除元素的同时,使下标减1,与数组大小的变化匹配。
// 刪除元素8-9
for (int i = 8; i < list.size(); i++)
{
list.remove(i);
i--;
}
System.out.println(Arrays.toString(list.toArray()));
// 输出 [0, 1, 2, 3, 4, 5, 6, 7]
2. 使用iterator进行迭代(建议使用)
Iterator it = list.iterator();
int index = 0;
while (it.hasNext())
{
Object obj = it.next();
if (index >= 8)
it.remove();
index++;
}
System.out.println(Arrays.toString(list.toArray()));
// 输出 [0, 1, 2, 3, 4, 5, 6, 7]