有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java内部迭代的好处

我只是想知道,内部迭代与外部迭代的真正好处是什么,以及为什么使用内部操作更好(至少我听说了这一点)。 在对集合进行内部迭代时,是否也可以删除集合的元素?如代码示例中所示:

我知道内部迭代的代码可读性更好,但是还有其他一些好处,比如性能改进吗

//List with Strings of Fruit-Names
      Iterator i = aList.iterator();
      String str = "";
      while (i.hasNext()) {
         str = (String) i.next();
         if (str.equals("Orange")) {
            i.remove();
            System.out.println("\nThe element Orange is removed");
            break;
         }
      }

共 (2) 个答案

  1. # 1 楼答案

    所以我要在这里阻止你-你的术语没有任何意义。你可能试图得到的是内环的概念,它是有效地在迭代中迭代,就像模拟手表的刻度盘一样

    您的代码只有一个循环这是while循环,这是。这就是你问题的一部分。。。有效地模拟。您可以迭代一个或多个集合(集合的集合…)你想要或需要多少次都行

    否则,这是在迭代集合时从集合中删除元素的正确方法;任何其他方法都会让您a ^{}。如果您想将其称为性能优势,那么当您想以这种方式删除元素时,您可以不引发异常

  2. # 2 楼答案

    您的条件有些简单,因为您可以简单地使用aList.remove("Orange")respaList.removeAll(Collections.singleton("Orange")),但是有一种内部迭代的替代方法,也适用于更复杂的条件aList.removeIf(str -> str.equals("Orange"))

    ArrayList的情况下,这将立即显示内部迭代的优势:在Iterator上调用remove()的情况下,ArrayList对循环没有控制权,因此不知道何时退出循环。放弃Iterator。您可以随时通过List接口访问列表,读取并继续迭代或写入,而不是进一步迭代

    因此,每次调用remove()时,列表都必须处于一致状态,即删除元素时,所有后续元素都必须复制到正确的位置。这使得迭代和从ArrayList中删除具有O(n²)时间复杂性的最坏情况

    相反,当方法返回时,removeIf方法只需提供List的完成状态。因此,它可能会将复制元素推迟到最终位置已知时,这使得它成为一个O(n)操作。因此,对于大型列表,有一个显著的性能优势

    通常,具有内部迭代的方法提供了针对特定内部数据结构进行优化的可能性,而不会比外部循环差,因为无论如何,基于迭代器的循环都是这些方法的回退