我想删除索引为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
答案 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
自动装箱Integer
且Integer
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());
}
}