关于List的remove陷阱

package com.jintao.list;
import java.util.List;

public class ListRemove
{

	/**
	 * @author yangjinjue
	 * @param args
	 */
	public static void main(String[] args)
	{
		List<String> listTest1 = new ArrayList<String>();
		listTest1.add("ff");
		listTest1.add("ff");
		listTest1.add("yy");
		
		System.out.println(listTest1.get(0));
		
		for(int i = 0; i < listTest1.size(); i++)
		{
			if(listTest1.get(i).equals("ff"))
			{
				listTest1.remove(i);
				i--;
			}
		}
		System.out.println(listTest1);
	}

}

结果是:[yy]

注意循环里面有个i--,如果没有这个减的话,结果就不是我们预想的样子会是[ff,yy]。因为List成员每次变化之后,list会动态调节每个元素的索引号,当第一次循环结束后,第一个ff被移出,第二个ff下标动态变成0,yy下标变为1,listTest1.size()为2,这时第二次进入循环i为1,这样就遍历不到第二个ff。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值