在发布此文章之前,我已经进行了一些研究,但是我仍然还不太了解它。基本上,我的Arraylist中有4个项目:
香蕉,橙子,苹果和菠萝
ArrayList<String> fruitList = new ArrayList<>();
addItems(){
fruitList.add("Banana");
fruitList.add("Oranges");
fruitList.add("Apples");
fruitList.add("Pineapples");
}
而我试图只留下一个。到目前为止,这是我尝试过的:
for (int i = 0; i <= fruitList.size() - 1; i++) {
fruitList.remove(i);
}
根据我的理解,上述代码应该删除3个项目,但是我得到2个项目; (橘子和菠萝)。
请帮助我理解这一点,以达到所需的结果。
答案 0 :(得分:3)
这里的问题是索引从列表的开头开始上升,而列表的大小在缩小:
for (int i = 0; i <= fruitList.size() - 1; i++) { fruitList.remove(i); }
不仅混淆了哪些元素被删除, 从这样的列表中间删除元素也是非常低效率的。
如另一个答案所建议的那样,最好使用从结尾开始的索引。
实现此目的的一种紧凑方法是使用子列表并将其清除:
fruitList.subList(1, fruitList.size()).clear();
System.out.println(fruitList);
// prints [Banana]
答案 1 :(得分:0)
要删除除第一个项目外的所有项目:
for (int i = fruitList.size() - 1; i > 0 ; i--) {
fruitList.remove(i);
}
向后迭代,使索引与列表大小的变化保持同步。
如果您这样做:
int size = fruitList.size();
for (int i = 0; i < size - 1; i++) {
fruitList.remove(0);
}
您将删除除最后一个项之外的所有项,因为在每次迭代时,您将删除第一个项,直到只有1个项被删除为止。