删除Arraylist中的所有项目以保留其中一个

时间:2018-12-15 16:08:36

标签: java android arraylist

在发布此文章之前,我已经进行了一些研究,但是我仍然还不太了解它。基本上,我的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个项目; (橘子和菠萝)。

请帮助我理解这一点,以达到所需的结果。

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个项被删除为止。