Если аргумент метода является примитивом int, то myArrayList.contains (primitiveArg) в цикле внутри метода чрезвычайно неэффективно или нормально? - PullRequest
0 голосов
/ 11 ноября 2018

У меня есть такой код:

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 происходил только один раз, или нет проблемы с производительностью.

Этот фрагмент кода внутри цикла выполняется более 100К раз ...

1 Ответ

0 голосов
/ 11 ноября 2018

Вы должны проверить это под JMH .

  • Вы можете избежать проблемы с боксом, используя Integer.valueOf(int) один раз и передавая его List::contains(Object).
  • Компилятор может быть достаточно эффективным, чтобы понимать, что number никогда не изменяется, и делать это за вас.

В остальном, без дополнительной информации (типа allDraws?), Возможна другая оптимизация перед преобразованием в бокс.

...