ArrayList删除索引为0和1的元素

时间:2015-06-29 00:10:22

标签: java arraylist collections

我想删除索引为0和1的ArrayList中的元素。但它不起作用,我不知道如何。

代码如下

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;


public class Test{

    public static void main(String[] args){
        Collection c = new ArrayList();

        c.add("A");
        c.add("B");
        c.add("C");

        for(Iterator i = c.iterator(); i.hasNext();)
            System.out.println(i.next());

        System.out.println("");
        c.remove(1);
        c.remove(0);

        for(Iterator i = c.iterator(); i.hasNext();)
            System.out.println(i.next());



    }   
}

输出

A
B
C

A
B
C

但输出应为

A
B
C

C

6 个答案:

答案 0 :(得分:6)

我相信这是因为你在Collection上调用了remove(int)。 Collection没有声明方法remove(int),但确实有remove(Object),因此java将你的int自动装箱到一个Integer中。但由于该整数不在集合中,因此不会删除任何内容

答案 1 :(得分:2)

我认为你已经找到了重要的一课。

问题是Collection不支持remove(int),只支持remove(Object)。所以编译器将你的int装入一个Integer,该元素不在集合中,因此它不会删除它。

如果将集合声明为ArrayList,则可以正常工作。

答案 2 :(得分:2)

c 更改为 ArrayList ,因为:

Collection.remove(对象o)

从此集合中移除指定元素的单个实例(如果存在)(可选操作)。更正式地,删除元素e,使得(o == null?e == null:o.equals(e))

在上面,如果它是 c.remove(“A”); 它将起作用。编写 c.remove(1); 正在寻找要删除的Integer对象。

ArrayList.remove(int index)

删除此列表中指定位置的元素。将任何后续元素向左移位(从索引中减去一个)。

所以你的程序应该如下:

public class Test{

    public static void main(String[] args){
        ArrayList c = new ArrayList();

        c.add("A");
        c.add("B");
        c.add("C");

        for(Iterator i = c.iterator(); i.hasNext();)
            System.out.println(i.next());

        System.out.println("");
        c.remove(1);
        c.remove(0);

        for(Iterator i = c.iterator(); i.hasNext();)
            System.out.println(i.next());
    }   
}

答案 3 :(得分:1)

正如@ControlAltDel所述,Collection仅支持remove(int) remove(Object)int自动装箱IntegerInteger 1}}不在集合中;所以没有任何东西被删除。

如果您想将c保留为集合,则可以使用Iterator.remove()删除前两项;像这样:

public static void main( final String[] args ){
    Collection<String> c = new ArrayList<>( Arrays.asList("A","B","C") );

    for( String str : c )
        System.out.println(str);
    System.out.println();

    Iterator<String> it = c.iterator();
    it.next();
    it.remove();
    it.next();
    it.remove();

    for( String str : c )
        System.out.println(str);
}

答案 4 :(得分:1)

你真正需要的是

c.remove((String)"A");
c.remove((String)"B");

如果您想继续使用Collection,请使用索引来引用它们。同样的原因是remove中的Collection方法需要Object参数。因此,当您编写c.remove(0)时,它会在列表中搜索元素0并尝试将其删除。

在这种情况下,请考虑使用Collection代替List时的性能权衡。

答案 5 :(得分:0)

集合只是数据集合,因此它们并不总是保留顺序。我建议用ArrayList替换集合

public class Test{


public static void main(String[] args){
    ArrayList c = new ArrayList();

    c.add("A");
    c.add("B");
    c.add("C");

    for(Iterator i = c.iterator(); i.hasNext();)
        System.out.println(i.next());

    System.out.println("");
    c.remove(1);
    c.remove(0);

    for(Iterator i = c.iterator(); i.hasNext();)
        System.out.println(i.next());



}   
}