Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ArrayList删除索引为0和1的元素_Java_Arraylist_Collections - Fatal编程技术网

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

Java ArrayList删除索引为0和1的元素,java,arraylist,collections,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.

我想删除索引为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

我相信这是因为您正在对
集合
调用remove(int)。集合不声明方法remove(int),但有remove(Object),因此java将int自动装箱为整数。但由于该整数不在集合中,因此不会删除任何内容

我认为您已经学到了一个重要的教训

问题是集合不支持
remove(int)
,只支持
remove(Object)
。因此编译器将int装箱为整数,该元素不在集合中,因此它不会删除它


如果改为将集合声明为ArrayList,则它可以工作

集合只是数据的集合,因此它们并不总是保持顺序。我建议将集合替换为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());



}   
}

如@ControlAltDel所述,仅不支持
remove(int)
,并且
int
自动装箱到
Integer
,而
Integer
不在集合中;所以没有任何东西被移除

如果要将
c
保留为一个集合,则可以使用删除前两项;像这样:

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);
}
publicstaticvoidmain(最终字符串[]args){
集合c=新的ArrayList(Arrays.asList(“A”、“B”、“c”));
for(字符串str:c)
系统输出打印项次(str);
System.out.println();
迭代器it=c.Iterator();
it.next();
it.remove();
it.next();
it.remove();
for(字符串str:c)
系统输出打印项次(str);
}

将您的c更改为ArrayList,因为:

收集。删除(对象o)

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

如果是c,则删除(“A”)它会起作用的。写c.remove(1)正在查找要删除的整数对象

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());
    }   
}

你真正需要的是

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

请考虑在使用<代码>集合而不是<代码>列表时进行性能权衡。