在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);
        }