wo定义了一个Collection类型的集合,存储以下字符串: “JavaEE企业级开发指南”,”Oracle高级编程”, ”MySQL从入门到精通”,”Java架构师之路”
使用迭代器遍历所有元素,筛选书名小于10个字符的,并打印;
请看我的代码:
public static void main(String[] args) {
Collection<String> list = new ArrayList<>();
list.add("JavaEE企业级开发指南");
list.add("Oracle高级编程");
list.add("MySQL从入门到精通");
list.add("Java架构师之路");
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()){
if(iterator.next().length()>10){
iterator.remove();
}
System.out.println(iterator.next());
}
它的结果是:
这明显不对,不是我要的,我就去改,然后就是这个问题的原因所在了,我改了while循环,请看:
while (iterator.hasNext()) {
String s = iterator.next();
if (s.length() > 10) {
System.out.println(s);
}
/*结果是:
------------
JavaEE企业级开发指南
MySQL从入门到精通*/
//然后我改了输出语句的s
while (iterator.hasNext()) {
String s = iterator.next();
if (s.length() > 10) {
System.out.println(iterator.next());
}
/*
它的结果就变成了:
------------
Oracle高级编程
Java架构师之路
*/
我寻思这两不是同一个意思吗,怎么会造成这种错误的???
你直接输出下一个结果怎么会一样呢
// 这里判断后面是否还有值
while (iterator.hasNext()){
// 获取下一个值
String s = iterator.next();
if(s.length()>10){
iterator.remove();
} else {
System.out.println(s);
}
}
说实话,你的需求有点稀里糊涂。你到底是要删除长度大于10的元素,打印<=10的元素,还是仅仅打印小于10的。