Производительность Java - ArrayLists и Arrays для быстрого чтения - PullRequest
14 голосов
/ 25 июля 2009

У меня есть программа, в которой мне нужно сделать от 100 000 до 1 000 000 операций чтения с произвольным доступом к объекту, подобному списку, как можно быстрее (как в миллисекундах) для программы, подобной клеточным автоматам. Я думаю, что алгоритм обновления, который я использую, уже оптимизирован (эффективно отслеживает активные ячейки и т. Д.). Списки должны изменить размер, но эта производительность не так важна. Поэтому мне интересно, достаточно ли производительности от использования Arrays вместо ArrayLists, чтобы иметь значение, когда приходится иметь дело с таким количеством операций чтения за такой короткий промежуток времени. В настоящее время я использую ArrayLists.

Редактировать: я забыл упомянуть: я просто храню целые числа, поэтому еще одним фактором является использование класса-оболочки Integer (в случае ArrayLists) по сравнению с int (в случаемассивов). Кто-нибудь знает, если использование ArrayList на самом деле потребует 3 поиска указателя (один для ArrayList, один для базового массива и один для Integer-> int), где для массива потребуется только 1 (адрес массива + смещение для конкретногоINT)? Хотел бы HotSpot оптимизировать дополнительные просмотры? Насколько значительны эти дополнительные поиски?

Edit2: Кроме того, я забыл упомянуть, что мне нужно также выполнять записи с произвольным доступом (записи, а не вставки).

Ответы [ 12 ]

1 голос
/ 25 июля 2009

Если вы не собираетесь делать намного больше, чем чтение из этой структуры, тогда продолжайте и используйте массив, так как он будет быстрее при чтении по индексу.

Однако, подумайте, как вы 'мы собираемся получить данные там, и если сортировка, вставка, удаление и т. д., являются проблемой вообще. Если это так, вы можете рассмотреть другие структуры на основе коллекции.

0 голосов
/ 25 июля 2009

Массив будет быстрее просто потому, что как минимум он пропускает вызов функции (т. Е. Get (i)).

Если у вас статический размер, то массивы - ваш друг.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...