【问题标题】:Iterate over a list of autobox type in Java遍历 Java 中的 autobox 类型列表
【发布时间】:2020-12-27 08:57:37
【问题描述】:

如果我填充这样的列表

        List<Integer> l = new ArrayList<>();
        for(int i = 0; i < 1000000; ++i) {
            l.add(i);
        }

迭代此列表的最佳方法是什么(就代码的简洁性和效率而言):

使用自动框类型

        for(Integer i : l) {
            // do stuff...
        }

或使用原始类型

        for(int i : l) {
            // do stuff...
        }

【问题讨论】:

  • 对我来说,这取决于您在循环内需要i 的内容。如果您需要int,请将其声明为int。如果您需要Integer,请将其声明为Integer。如果两者都需要,我会倾向于Integer,但这取决于。

标签: java iteration


【解决方案1】:

实际上,第一个循环 - for(Integer i : l) - 没有自动装箱,因为 lList&lt;Integer&gt;。当您将元素添加到 List 时,自动装箱发生。

另一方面,第二个循环 - for(int i : l) - 将 Integer 元素自动拆箱到 ints。

至于哪个更好,这取决于你要对这些元素做什么。

例如,如果您要将它们添加到另一个List(或检查它们是否是某些Map 的键),则无需将它们拆箱,因此您可以使用第一个循环。

另一方面,如果您要对它们进行数字运算(例如计算它们的总和),那么无论如何您都必须将它们拆箱,所以您不妨使用第二个循环。

【讨论】:

    【解决方案2】:

    我尝试了两个选项来计算列表的总和,这是结果

    【讨论】:

      猜你喜欢
      • 2014-02-19
      • 2016-10-09
      • 2011-02-16
      • 1970-01-01
      • 1970-01-01
      • 2013-06-13
      • 1970-01-01
      • 1970-01-01
      • 2016-03-08
      相关资源
      最近更新 更多