ArrayList循环遍历删除多个元素

以前都是用ArrayList删除一个元素,当然是没有问题的,今天用ArrayList删除多个元素,直接就出现问题了

其实原因很简单,比如有5个元素你删除了第二个元素,那么此时你的遍历i为1数组arraylist长度变为4,此时你再去遍历i=2这个元素的时候本来应该是遍历原来arraylist的第三个元素,但是第二个删除了,后面的就依次向前移动,这样就跳过了遍历第三个元素。

解决方案:

      看了很多的方法,觉得这两个最优

      1.倒序遍历。使用倒序遍历,元素向前移动是不会影响arraylist的排列的

		for (int i = list.size()-1; i >= 0; i--) {
			try {
				System.out.println(list.get(i).getName()+list.get(i).getCode());
				System.out.println();
				if(list.get(i).getCode()!=null){
					System.out.println("开始验证"+list.get(i).getName()+list.get(i).getCode());
					SecurityUtils.getSubject().checkPermission(list.get(i).getCode());
					System.out.println("没有去掉"+list.get(i).getName()+"代码号为"+list.get(i).getCode());
					System.out.println();
				}
			} catch (Exception e) {
				System.out.println("去掉了!!!!"+list.get(i).getName()+list.get(i).getCode());
				System.out.println();
				list.remove(i);
			}
		}

       2.使用iterator

    

Iterator<String> it = list.iterator();
while(it.hasNext()){
    String x = it.next();
    if(x.equals("del")){
        it.remove();
    }
}

     当前,为什么说arraylist会往前移动呢,因为arraylist的底层实现是基于 数组的扩容机制  本身就是数组,所以当然会移动。

猜你喜欢

转载自blog.csdn.net/afdasfggasdf/article/details/88289511