0

我有以下整数列表

whatToRemove = {2, 3, 8};

和另一个清单

lst = {4, 6, 8}

我想从中删除所有whatToRemove元素lst

我正在尝试使用lst.remove(whatToRemove.get(i)),但它正在尝试删除索引,而不是值。

我怎样才能做到这一点?

4

8 回答 8

1
    List<Integer> whatToRemove = Arrays.asList(2, 3, 8);
    List<Integer> lst = new ArrayList<Integer>(Arrays.asList(4, 6, 8));
    lst.removeAll(whatToRemove);
于 2013-05-18T15:54:25.363 回答
0

使用列表元素,您将要删除列表中对象的索引。对于您的示例,它显然是整数。为此,您可以使用 for 循环或以手动方式将每个索引对象拉出。

for 循环 - 示例:

for(int i = 0; i < whatToRemove.size(); i++){
     whatToRemove.remove(i);
 }

手册 - 示例:

whatToRemove.remove(0);
whatToRemove.remove(1);
whatToRemove.remove(2);

这是我从您的问题中了解到的,您想从列表中删除所有元素,称为“whatToRemove”。

这是一个链接,可以提供对列表参数的一些了解链接 - Java Object 'List'

于 2013-05-18T15:57:37.947 回答
0

使用迭代器:

for (Iterator it=lst.iterator(); it.hasNext();) {
   if (whatToRemove.contains(it.next())
      it.remove();
}
于 2013-05-18T15:48:55.273 回答
0

如果您使用 Java 集合来执行此操作,您可以简单地调用removeAll(Collection<T> o)您的第一个列表来删除所有出现。

它看起来像lst.removeAll(whatToRemove);

或者,您可以轻松地遍历所有元素

for(int num : whatToRemove)
{
     lst.remove(num);
}

两者都是可行的,如果您使用数组,您仍然可以使用增强的 for 进行迭代。但删除是一个不同的问题。

链接到 Javadoc:列表

于 2013-05-18T15:49:36.340 回答
0

这是因为 List 具有按索引删除元素的删除和按对象删除的删除,请参阅:

http://docs.oracle.com/javase/6/docs/api/java/util/List.html#remove(int)

看看有 2 个删除:-(?

不幸的是,由于您的列表包含整数 Java 认为您的意思是 remove(item at) 而不是 remove(object)

利用

Collection lst = [whatever]
lst.remove(whatToRemove.get(i))

...然后删除应该正常工作,因为 Collection 只有一种删除功能(您要使用的那个)

http://docs.oracle.com/javase/6/docs/api/java/util/Collection.html

于 2013-05-18T15:49:48.483 回答
0

您可以使用removeAll(),它接受一个实现 的对象Collection interface作为参数,如下所示:

list.removeAll(collection);

或者,您需要进行某种迭代以遍历要删除的所有值,因为remove()不将另一个列表作为参数,仅将索引或对象作为参数:

for(int i=0;i<whatToRemove.size();i++){
lst.remove(whatToRemove.get(i));
}
于 2013-05-18T15:46:10.573 回答
0

在 List 上使用 removeAll 方法

于 2013-05-18T15:51:40.693 回答
0

您可以使用removeAll(Collection c)方法,如下所示

lst.removeAll(whatToRemove);

请检查下面的示例

List<Integer> whatToRemove = new ArrayList<Integer>();
whatToRemove.add(new Integer(2));
whatToRemove.add(new Integer(3));
whatToRemove.add(new Integer(8));

List<Integer> lst = new ArrayList<Integer>();
lst.add(new Integer(4));
lst.add(new Integer(6));
lst.add(new Integer(8));

lst.removeAll(whatToRemove);

有关收集和 removeAll 方法的更多详细信息,您可以参考以下 URL

http://docs.oracle.com/javase/6/docs/api/java/util/Collection.html

于 2013-05-18T16:01:09.473 回答