Java中使用Iterator遍历LinkedList出现无限循环问题求助
问题核心原因
你的代码陷入无限循环,和LinkedList、Iterator的功能逻辑无关,完全是写while循环时误加了一个分号导致的。
问题代码片段:while(i.hasNext());
Java语法中,单独的分号代表空语句,意味着这个while循环的循环体就是这个空语句本身,后面大括号包裹的打印逻辑,根本不属于这个循环的执行范围。更关键的是,空循环的执行过程中从来没有调用i.next()推进迭代器的内部游标,hasNext()会一直返回true,程序就卡在这个空逻辑里无限循环,永远走不到后面的打印代码。
修正方案
只需要删掉while判断条件后面多余的分号,迭代遍历就能正常运行:
Iterator i = ls.iterator(); while(i.hasNext()) { System.out.println(i.next()); }
新手注意事项
- 增强for循环的底层实现,本质就是调用集合的Iterator完成遍历的,之前你用增强for能正常输出所有元素,恰好说明你的LinkedList元素存储、迭代器基础功能都是完好的,不需要怀疑集合本身的问题
- 这是Java初学者写循环时最容易踩的经典坑:不管是while还是普通for循环,写完循环判断条件后不要随意敲上分号,尤其是用IDE自动补全代码时,很容易误加这种隐蔽的语法错误
- 你当前使用的是不带泛型的原始类型LinkedList、Iterator,后续学习到泛型内容后,建议给集合指定明确的元素类型,比如
LinkedList<Object> ls = new LinkedList<>(),可以提前规避后续开发中可能出现的类型转换异常
内容的提问来源于stack exchange,提问作者Shreshta
相关产品推荐
相关产品推荐

