关于详细的解释可以参考:http://blog.csdn.net/smcwwh/article/details/7036663 解决办法可以如下:public class Hello { public static void main(String[] args) { ArrayList<String> list = new ArrayList<String>(); Collections.addAll(list, "a,b,c,d,e,f".split(",")); for (String string : list) { if (string.equals("d")) { list.remove(string); break; } } for (int i = 0; i < list.size(); i++) { String string = list.get(i); if (string.equals("b")) { list.remove(string); } } } }
for (int a : list) { list.remove(2); } 这个写法本身就是有问题的。 ①、如果想要保持你的操作而不报错请加上这样一个判断 for (int a : list) { if (a == 2) list.remove(2); } ②、list.remove(2);会将2当数组下标也就是说会删除list的第三个元素,而你的list本身只有3个元素,所以for执行到二次的时候就会抛出IndexOutOfBoundException。要删除元属请使用list.remove(new Integer(2)); ③、如果要达到预期的效果也就是删除list中所有的2可以使用 while (list.contains(new Integer(2))) { list.remove(new Integer(2)); }
ArrayList是线程不安全的,你边遍历又删除自然报出并发异常(快速失败异常)
很多人会出这样的错误。楼主对集合的特性要了解透彻
解决办法可以如下:public class Hello {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<String>();
Collections.addAll(list, "a,b,c,d,e,f".split(",")); for (String string : list) {
if (string.equals("d")) {
list.remove(string);
break;
}
} for (int i = 0; i < list.size(); i++) {
String string = list.get(i);
if (string.equals("b")) {
list.remove(string);
}
}
}
}
list.remove(2);
}
这个写法本身就是有问题的。
①、如果想要保持你的操作而不报错请加上这样一个判断
for (int a : list) {
if (a == 2) list.remove(2);
}
②、list.remove(2);会将2当数组下标也就是说会删除list的第三个元素,而你的list本身只有3个元素,所以for执行到二次的时候就会抛出IndexOutOfBoundException。要删除元属请使用list.remove(new Integer(2));
③、如果要达到预期的效果也就是删除list中所有的2可以使用
while (list.contains(new Integer(2))) {
list.remove(new Integer(2));
}
{
ArrayList<Integer> list=new ArrayList<Integer>();
list.add(2);
list.add(3);
list.add(2);
for(int a=0;a<list.size();a++)
{
if(list.get(a)==3)
list.remove(a);
}
for(int a=0;a<list.size();a++)
{
System.out.println(list.get(a));
}
}
用普通的for就没问题