如何从Java ArrayList中删除顺序元素?

时间:2010-10-22 16:36:21

标签: java arraylist

我是一个相对较新的Java程序员,我从diffList中删除了多个元素。理想情况下,我想做这样的事情:

ArrayList ar1 = new ArrayList();
ar1.add(...)
ar1.add(...)
ar1.add(...)
ar1.add(...)

for (int i = 0; i < 2; i++){
     ar1.remove(i);
}

我认为迭代器可能会有所帮助,但我找不到一个与我正在尝试的内容相近的示例。任何帮助,将不胜感激。感谢。

6 个答案:

答案 0 :(得分:21)

这是你想要做的:

ar1.subList(0, 2).clear();

这将创建列表的前2个元素的子列表视图,然后清除该子列表,将其从原始列表中删除。 subList方法主要用于此类事务......在列表的特定范围内执行操作。

答案 1 :(得分:5)

你当然可以这样做

    ArrayList ar1 = new ArrayList();
    ar1.add("a");
    ar1.add("b");
    ar1.add("c");
    ar1.add("d");

    for (int i = 0; i < 2; i++) {
        ar1.remove(i);
    }
    System.out.println(ar1);

请注意,在删除第一个元素后,其他元素会移位。因此,请致电

ar1.remove(0);
ar1.remove(1);

将有效地从列表中删除第一个和第三个元素。但是,这将删除前两个元素:

ar1.remove(0);
ar1.remove(0);

答案 2 :(得分:3)

对于列表中的索引删除,您需要向后计数:

 for (int i = 1; i >= 0; i--)

否则,您的第一次删除会将项目中的项目“移到”上方,并且您不会删除您认为要删除的项目。

答案 3 :(得分:2)

如果要删除单独的对象列表,可以使用Collection.removeAll(toRemove)。

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

如果你的集合是基于索引的,就像ArrayList那样,你可以调用

remove(index)

删除索引处的元素。你可以在一个循环中做到这一点,但要注意删除所有索引的移动作为另一个答案指出。

如果您只想删除列表中的前两个元素,那么

   list.remove(0);
   list.remove(0);

应该这样做。

答案 4 :(得分:2)

如果您知道要删除的项目的索引,可以按相反的顺序删除它们,而不必担心转移索引:

    ArrayList ar1 = new ArrayList();
    ar1.add("a");
    ar1.add("b");
    ar1.add("c");
    ar1.add("d");

    int[] indexesToRemove = {0,2,3};
    Arrays.sort(indexesToRemove);
    for (int i=indexesToRemove.length-1; i>=0; i--) {
        ar1.remove(indexesToRemove[i]);
    }

答案 5 :(得分:1)

你可以试试这个:

List<Whatever> l = new ArrayList<Whatever>();
l.add(someStuff);
Iterator<Whatever> it = l.iterator();
int i = 0;
while (i < 2 && it.hasNext()) {
    it.next();
    it.remove();
    i++;
}

或者,更一般地说:

List<Whatever> l = new ArrayList<Whatever>();
l.add(someStuff);
Iterator<Whatever> it = l.iterator();
while (it.hasNext()) {
    Whatever next = it.next();
    if (shouldRemove(next)) {
        it.remove();
    }
}
编辑:我想这取决于您是否尝试删除特定索引或特定对象。它还取决于您需要多少逻辑来决定是否应删除某些内容。如果您知道索引,则按相反顺序删除它们。如果要删除一组对象,请使用removeAll。如果要迭代列表并删除与谓词匹配的对象,请使用上面的代码。

相关问题