zoukankan      html  css  js  c++  java
  • 使用List中remove方法时需要注意的问题

    		String str1 = new String("1");
    		String str2 = new String("2");
    		String str3 = new String("3");
    		String str4 = new String("4");
    		String str5 = new String("5");
    		List list = new ArrayList();
    		list.add(str1);
    		list.add(str2);
    		list.add(str3);
    		list.add(str4);
    		list.add(str5);
    		System.out.println("list.size()=" + list.size());		
    		
    		for (int i = 0; i < list.size(); i++) {				
    				list.remove(i);			
    			//	i--;
    			//System.out.println(i+" "+list.get(i)+" ");
    		}		
    		System.out.println("after remove:list.size()=" + list.size());
    

    本来预期结果应该是:

    list.size()=5
    after remove:list.size()=0

    但实际上结果却是:

    list.size()=5
    after remove:list.size()=2

    原因如下: List每remove掉一个元素以后,后面的元素都会向前移动 此时如果执行i++,则刚刚移过来的元素没有被读取。

    分析:

    List中有5条数据,需要循环5次,

    第一次数据为:1 2 3 4 5

           执行完remove(0) 后,数据为 2 3 4 5  , i=1

    第二次数据为:2 3 4 5

           执行完remove(1) 后,数据为 2 4 5  , i=2

    第三次数据为:2 4 5

           执行完remove(2) 后,数据为 2 4  , i=3

    此时如果加上上面注释的代码 System.out.println(i+" "+list.get(i)+" "); 循环第4、5次时就会出现异常

     

    解决方法1:

       每移过一次后,再把 i 移回来

    for (int i = 0; i < list.size(); i++) {				
    				list.remove(i);			
    				i--;			
    		}

    解决方法2:

        先删除后面的元素

    for (int i = list.size()-1; i >= 0; i--) {				
    			list.remove(i);			    
    		}

    原文出处:

    [1] cbjcry, 使用List中remove方法时需要注意的问题, https://blog.csdn.net/cbjcry/article/details/70154568

    注:转载后,已经重复验证了分析过程以及解决方案的正确与有效。

  • 相关阅读:
    apply()和call()的区别
    强制类型转换
    浮动理解
    清除浮动的方式
    五大主流浏览器及四大内核
    CSS引入方式
    js构建类的方法
    web前端与后端的理解区分
    Java的API及Object
    面向对象之this关键字
  • 原文地址:https://www.cnblogs.com/ryelqy/p/10104067.html
Copyright © 2011-2022 走看看