首页 > 解决方案 > 如果方法参数是原始 int,那么方法内循环内的 myArrayList.contains(primitiveArg) 效率极低还是可以?

问题描述

我有这样的代码:

public int getDistanceToNumber(int number) {
    List<Integer> tuple5 = null;
    int distanceCounter = 0;
    for (int i = 0; i < allDraws.size(); i++) {
        tuple5 = allDraws.get(i).getTupleAsList();
        if (tuple5.contains(number)) {  // autoboxing primitive ?

        }

    }

    return 0;
}

问题是 - 我应该让方法参数 Integer 像int getDistanceToNumber(Integer number)从原始到 Integer 的自动装箱只发生一次,还是没有性能问题。

循环内的这段代码运行了超过 10 万次......

标签: javaperformanceautoboxing

解决方案


您应该在JMH下进行测试。

  • 您可以通过使用Integer.valueOf(int)一次并将其传递给List::contains(Object).
  • 编译器可能足够高效,可以理解number永远不会更改的内容并为您执行此操作。

其余的,如果没有更多信息(类型allDraws?),在装箱转换之前可能还有其他优化要做。


推荐阅读