Массив против ArrayList в производительности
Какая из них лучше в производительности между массивом типа Object и ArrayList типа Object?
Предположим, что у нас есть массив объектов Animal
: Animal animal[]
и arraylist: ArrayList list<Animal>
Теперь я делаю animal[10]
и list.get(10)
который должен быть быстрее и почему?
Ответы
Ответ 1
Весьма очевидно, что массив [10] быстрее, чем array.get(10), поскольку более поздний из них выполняет один и тот же вызов, но добавляет накладные расходы для вызова функции плюс дополнительные проверки.
Однако современные JIT оптимизируют это до некоторой степени, что вам редко приходится беспокоиться об этом, если у вас нет приложения с очень высокой критичностью, и это было измерено как ваше узкое место.
Ответ 2
Из здесь:
ArrayList внутренне поддерживается Array в Java, любая операция изменения размера в ArrayList будет замедлять производительность, поскольку она предполагает создание новых Массив и копирование содержимого из старого массива в новый массив.
С точки зрения производительности Array и ArrayList производительность с точки зрения постоянного времени для добавления или получения элемента, если вы знаете индекс. Хотя автоматическое изменение размера ArrayList может замедлить вставка бит Оба массива и ArrayList являются основной концепцией Java и любой серьезный Java-программист должен быть знаком с этими различиями между Array и ArrayList или более общим массивом и списком.
Ответ 3
При принятии решения использовать Array или ArrayList ваш первый инстинкт действительно не должен беспокоить производительность, хотя они выполняют разные действия. Вы сначала должны заботиться о том, знаете ли вы размер массива перед рукой. Если вы этого не сделаете, вы, естественно, пойдете с массивом, просто для функциональности.
Ответ 4
Я согласен с кем-то недавно удаленным сообщением о том, что различия в производительности настолько малы, что, за очень немногими исключениями (он погладил, что не сказал никогда), вы не должны принимать решение на основе этого.
В вашем примере, где элементы являются объектами, разница в производительности должна быть минимальной.
Если вы имеете дело с большим количеством примитивов, массив будет предлагать значительно лучшую производительность как в памяти, так и во времени.
Ответ 5
Массивы лучше работают. ArrayList предоставляет дополнительные функции, такие как "удалить" за счет производительности.