从arraylist中删除项目

时间:2014-02-25 12:58:49

标签: java arraylist

在我的程序中,我有一个List of Strings和一个List of integer values应该从第一个列表中删除。想想这样的事情:

ArrayList<String> items = new ArrayList<String>();
items.add("A"); items.add("B"); items.add("C");

ArrayList<Integer> del = new ArrayList<Integer>();
del.add(1); del.add(2);

当然,我可以使用此代码遍历列表并删除项目:

for (int i = 0; i < del.size(); i++) 
{
    items.remove(del.get(i));
}

但这是问题所在。删除第一个元素后,索引被移动,所以我删除了错误的项目。对此有优雅的解决方案吗?

3 个答案:

答案 0 :(得分:3)

按降序对删除列表进行排序,然后迭代:

Collections.sort(del, Collections.reverseOrder());
for (Integer toDelete : del) {
    // casting to int, because you need #remove(int), not #remove(Object)
    items.remove((int)toDelete);
}

[编辑]修正。对不起,这在开始时被翻了两次。

[edit2]添加了必要的演员:)

答案 1 :(得分:1)

你有几个选择,但其中两个更简单:

  1. 首先删除最大的索引。在执行此操作之前,请按降序对索引列表进行排序。

  2. 如果由于某种原因对索引列表进行排序是不可行的,并且您的字符串列表通常不包含null,请先用null替换要删除的所有项目,然后删除所有null来自字符串列表(例如while (items.remove(null)) ;)。

答案 2 :(得分:0)

平滑?我不这么认为。一个可行的解决方案是确保您的del list已排序,然后通过并递减所有后续索引,以便它们同步备份。

更好的解决方案是使用问题域特有的密钥来删除,而不是使用数组索引。那将是一个优雅的解决方案。