黑马程序员技术交流社区

标题: 集合迭代隐藏陷阱 [打印本页]

作者: 宋红旺    时间: 2011-9-23 11:03
标题: 集合迭代隐藏陷阱
java中集合在迭代中的类似以下容易忽略的小问题汇总,大家都来补充吧!!!!
我先说两个:
/////////////////////////情况一//////////////////////////
String str="abcdef";
for(int i=str.length;i>0;i--){
str=str.substring(0,2);
i=str.length;//此时的str.length是6而不是2
}
////////////////////////情况二///////////////////////////////
List list=new ArrayList();
list.add(1);
list.add(2);
list.add(3);
for(Iterator it=list.iterator();it.hasNext();){
System.out.println(it.next());
it.remove();
//list.remove(1);这里不能用集合的remove方法移除,
//否则会出现Exception in thread "main" java.lang.IllegalStateException
}
大家分享,共同进步。
作者: 匿名    时间: 2011-9-23 13:16
。。。真的是死循环,第一个。。i一直等于2
作者: 匿名    时间: 2011-9-23 14:41
/////////////////////////情况一//////////////////////////[code=java]String str="abcdef";
for(int i=str.length;i>0;i--){
str=str.substring(0,2);
i=str.length;//此时的str.length是6而不是2
} [/code]str的length()方法返回的是2

我看了半天不知道楼主想要阐述什么观点,

死循环是因为在循环中总是将str字符串截取后的长度赋予i。i的值没有改变。一直满足于for循环中的条件
作者: 匿名    时间: 2011-9-24 20:57
童鞋们,不好意思,的确是我的失误。
String str="abcdef";
for(int i=str.length;i>0;i--){
str=str.substring(0,2);
System.out.println(str.length);//此时的str.length是2而不6(这里写反了)
}
在这里我想表述的是,for循环的i变量一旦赋值,等到第二遍再循环的时候就不会从新赋值了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2