List list=new ArrayList();
list.add(new ForTest("1"));
list.add(new ForTest("2"));
list.add(new ForTest("3"));
list.add(new ForTest("4"));
list.add(new ForTest("5"));
list.add(new ForTest("6"));
list.add(new ForTest("7"));
for (int i = 0; i < list.size(); i++) {
ForTest test=list.get(i);
if(test.getFlag().equals("3")){
list.remove(i);
}
//System.out.println("循环到:"+i+",list.get(i).getFlag()="+list.get(i).getFlag());
System.out.println("循环到:"+i+",flag="+test.getFlag());
}
}
这么写
for (int i = list.size()-1; i >=0; i--)
test.getFlag()里的0指的就是list.add(new ForTest("1"));
test.getFlag()为0---对应---list.add(new ForTest("1"));
test.getFlag()为1------list.add(new ForTest("2"));
test.getFlag()为2------list.add(new ForTest("3"));
test.getFlag()为3------list.add(new ForTest("4"));你的if条件里写的是3,所以remove 4.
test.getFlag()为4------list.add(new ForTest("5"));
所以这行 if(test.getFlag().equals("3"))里的“3”指的就是 ForTest("4")。
不知道我写得清不清楚,看得懂吗?
循环是从0开始的
i=0 remove的是1
.
.
.
i=3 remove的是4
列表中值为4的元素的下标是3,需要知道你的对象ForTest的flag属性对应的值是什么,如果也是3的话,那么4这个值就被删除了。
需要知道你的ForTest类的定义,还有这是java代码吗?
这跟for循环没有关系,for循环就是遍历list用的,对remove掉了4没有什么影响。
主要是test.getFlag().equals("3")这行,3对应的是list中的ForTest("4").。。
我觉得你们都没看到问题.
从零开始数的啊- -!
楼主还是把完整的代码贴一下吧 按楼主所展示的代码 不应该移除4 问题还得是判断里出现问题.
了解一下物理顺序和逻辑顺序对你会有帮助
下标是3,其实是第四个了,0,1,2,3
这个就是和数组差不多,数组元素索引都是从0开始算,比如a[5]={1,2,3,4,5,6};那么a[0]=1;a[1]=2
就是索引(下标)是从0开始,所以if(test.getFlag().equals("3")) list.remove(i); 就是remove(3),也就是第四个元素,就是去掉了4,这里你是判断了索引,而不是那个元素的索引,不知道你是不是想要remove掉值为4的那个元素
索引不对,
List list=new ArrayList();
list.add(new ForTest("1"));索引为0
list.add(new ForTest("2"));索引为1
list.add(new ForTest("3"));索引为2
list.add(new ForTest("4"));索引为3
list.add(new ForTest("5"));。。。。
list.add(new ForTest("6"));。。。。
list.add(new ForTest("7"));。。。。。
你的下面这里取的是第三个索引,所以是remove的4这个
for (int i = 0; i < list.size(); i++) {
ForTest test=list.get(i);
if(test.getFlag().equals("3")){
list.remove(i);
}
//System.out.println("循环到:"+i+",list.get(i).getFlag()="+list.get(i).getFlag());
System.out.println("循环到:"+i+",flag="+test.getFlag());
}
}