关于java for()循环 remove 的使用
来源:互联网 发布:大数据 量化交易 pdf 编辑:程序博客网 时间:2024/05/17 09:32
case 1:public static void main(String[] args) {
List<Integer> ls = new ArrayList<Integer>();
ls.add(1);ls.add(2);ls.add(3);System.out.println(ls.toString());
for (Integer in : ls) {if (in == 3) {//in==2时,正常执行ls.remove(in);}}System.out.println(ls.toString());}
执行上面的代码时,程序会报错,只要是删除2以外的任何数,都会导致出错,原因: 对于for(),java 虚拟机会将其翻译成Iterator迭代器,java编译器中含有:hasNext()函数,而hasNext()函数中含有:size()函数,这意味着list数组的大小是动态生成的,
它是使用index!=size()来判定是否有下一个元素的,理论上只有最后元素才回返回false,其它元素都会返回true,一旦返回了true就会调用next,这样在调用next的过程中就会调用concurrentExceptions,在for()中,不容许调用remove()函数。
这也就解释了,删除倒数第二个数,不会导致报错,因为在判断倒数第二个数的时候,index!=size直接返回false,这样没有next,也就不存在next的调用了。
解决办法: */public static void main(String[] args) {// TODO Auto-generated method stub
List<Integer> ls = new ArrayList<Integer>();
ls.add(1);ls.add(2);ls.add(3);
int i = 0;int len = ls.size();
for (; i < len; i++) {
if (ls.get(i).equals(2)) {ls.remove(ls.get(i));i--;len--;}}
System.out.println(ls.toString());}
通过固定list的大小,然后每remove一个元素,紧接着使len元素减少,这样会不会出现这样的问题。
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
List<Integer> ls = new ArrayList<Integer>();
ls.add(1);
ls.add(2);
ls.add(3);
int i = 0;
int len = ls.size();
for (; i < len; i++) {
if (ls.get(i).equals(2)) {
ls.remove(ls.get(i));
i--;
len--;
}
}
System.out.println(ls.toString());
}
0 0
- 关于java for()循环 remove 的使用
- 关于java for()循环 remove 的使用
- 关于for each循环不能直接使用集合的remove方法的原因
- Java循环中remove方法的使用
- easyUI accordion 使用和remove方法 for循环的异常
- 关于JAVA中使用remove方法循环删除list中元素的常见误区
- Java - for 循环的使用
- 高级for循环使用remove/add 问题
- 关于List.remove在for循环中出现问题的解决方案
- 关于List.remove在for循环中出现问题的解决方案
- 关于List.remove在for循环中出现问题的解决方案
- java初学者,for循环的使用错误。
- Java中For-Each循环的使用
- java中for循环的使用
- java关于集合的遍历与增强for循环的使用
- java关于集合(list,set,map)的遍历与增强for循环的使用
- java关于集合的遍历与增强for循环的使用
- java关于集合的遍历与增强for循环的使用
- Xcode 升级后,常常遇到的遇到的警告、错误,解决方法
- 语法仍然会工作
- Effective JavaScript Item 28 不要依赖函数的toString方法
- 位运算
- 二分图最小路径覆盖 POJ 1548、1422、2594、3216
- 关于java for()循环 remove 的使用
- Linux基础汇总
- C++类的静态成员详细讲解
- ios架构分析--4层架构(CocoaTouch层)
- 【MARK】去除BOM头的方法
- Android 网络加载图片点击大图后 浏览 可 缩放
- HDU2888 Check Corners
- 字符串替换
- 异步双口RAM的综合【异步Dual Port RAM(DPRAM)】