在Java中为每条语句使用迭代器接口或
//第二条在Java中为每条语句使用迭代器接口或,java,Java,//第二条 for(String s : sk){ System.out.println("The Values of String in SK" +sk); } Iterator it=sk.Iterator(); while(it.hasNext()) { String iValue=(String)it.next(); System.out.println(“迭代器值:+iValue”); } 这两者有什么区别 如果我从中选一个有什么好处吗 哪种是首选的迭代方式 迭代器的优点是,
for(String s : sk){
System.out.println("The Values of String in SK" +sk);
}
Iterator it=sk.Iterator();
while(it.hasNext())
{
String iValue=(String)it.next();
System.out.println(“迭代器值:+iValue”);
}
迭代器
的优点是,可以在对集合进行迭代时从集合中删除元素。Foreach可能会在那里抛出ConcurrentModificationException
如果您不需要,我更喜欢前一种方式,因为它更容易阅读。使用
迭代器
可以防止在循环遍历列表时出现java.util.ConcurrentModificationException
在For each和迭代器之间进行选择只是为了方便。For-each循环看起来有点神秘,特别是对于那些习惯于传统For循环的人来说。但是,Iterator
s的缺点是,您必须将对象
从next()
强制转换为适当的类型,尽管您的集合没有被类型化。对于每个人来说,一切都是在幕后发生的
1。这两者之间有什么区别?
不多。for-each循环构造实际上依赖于窗帘后面的迭代器
进一步阅读:
- ,官方文件/教程
2。如果我从中选择一个,有什么好处吗?
我认为大部分是可读性
(如果您需要访问iterator.remove()
方法,那么显然您需要使用显式iterator
方法。)但是,请记住,这是一个可选操作,您正在使用的底层堆栈
实现可能不支持它
此外,“代码>堆栈结构的要点是,您不能删除中间的元素。
3。哪种迭代方式是首选的?
如果对您有效,请为每种方法使用
这两者有什么区别
没什么。除了额外的代码
如果我从中选一个有什么好处吗
对。如果使用较新的(foreach),行数较少,因此更易于阅读
哪种是首选的迭代方式
foreach循环
您可能需要阅读约书亚·布洛赫的《有效的Java》中的以下内容:
for
循环以其传统形式和for每种形式允许您声明循环
变量,将其范围限制在所需的确切区域。(本
区域由循环体以及初始化、测试和更新组成
因此,更喜欢for
循环而不是,而循环
,假设
循环终止后不需要循环变量的内容
简而言之:
- 每个
循环的始终是类型安全的
每个
循环的不太容易出现复制/粘贴错误(在代码中复制/粘贴迭代器1两次!)
每个
循环的允许您最小化局部变量的范围
每个
循环的更易于阅读
总之,当您不明确需要while
循环时,更喜欢for each
循环而不是while
循环。如果他需要从集合中间删除元素,为什么要使用堆栈呢?实际上,由于java 1.5,迭代器是通用的,因此,如果向集合和迭代器添加了适当的泛型参数,则不需要强制转换
for(String s : sk){
System.out.println("The Values of String in SK" +sk);
}
Iterator<String> it=sk.iterator();
while(it.hasNext())
{
String iValue=(String)it.next();
System.out.println("Iterator value :"+iValue);
}