Java ArrayList删除索引为0和1的元素
我想删除索引为0和1的ArrayList中的元素。但它不起作用,我也不知道该怎么办 代码如下所示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.
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
,并尝试将其删除
请考虑在使用<代码>集合而不是<代码>列表时进行性能权衡。