ArrayList<Object> list = new ArrayList<Object>();
list.add(12);
list.add("Hello");
list.add(true);
list.add('c');
Iterator iterator = list.iterator();
while(iterator.hasNext())
{
System.out.println(iterator.next().toString());
}
当我在IntelliJ IDEA中输入这个Java代码时,代码分析功能建议我用for循环替换while循环,因为我正在迭代一个集合。这是为什么?
答案 0 :(得分:21)
这是它想要你使用的:
for (Object o : list)
{
System.out.println(o.toString());
}
这是Java 1.5以来的语言,是惯用模式。只有在需要访问迭代器的其他方法(即remove()
)时才需要Iterator。
答案 1 :(得分:14)
因为你不太可能犯错误而且看起来更好; )
for( Object obj : list ) {
System.out.println( obj.toString() );
}
答案 2 :(得分:11)
因为你有检查Java语言迁移辅助 - 'while'循环可以用'for each'活动(默认)替换,描述是
此检查报告迭代集合或循环的循环 数组,可以用“for each”迭代语法替换, 适用于Java 5及更高版本。设置Report java.util.List 索引循环负责查找涉及的循环 list.get(index)调用。这些循环通常可以用 foreach循环,除非他们修改过程中的基础列表,例如 通过调用list.remove(index)。如果是后者,则为foreach形式 循环可能会抛出ConcurrentModificationException。仅此检查 报告项目或模块是否配置为使用语言级别 5.0或更高。
所以如果你不想被告知这个,那么在Inspections配置中取消选中该框
答案 3 :(得分:2)
foreach循环写入时间更短,因此更容易阅读。
答案 4 :(得分:0)
然而,与 while 循环相比,Foreach 循环创建了一个匿名类并消耗更多内存,我建议忽略该建议并使用 while 循环来更好地优化您的代码的使用。