|
31 / 31 / 6
Регистрация: 11.07.2013
Сообщений: 241
|
||
Доступ к элементу массива20.09.2013, 04:28. Показов 16379. Ответов 11
Метки нет (Все метки)
Здравствуйте! Такой вопрос: для одномерного массива на 100 элементов к какому из элементов быстрее произойдет обращение по индексу – к третьему или к предпоследнему и почему?
Добавлено через 1 час 52 минуты еще: как можно посмотреть описание устройства массивов в java? (например, откуда берется свойство length) Добавлено через 5 часов 6 минут Еще чего не понимаю. Раз массив является ссылочным типом аля обьектом, то какого класса? Добавлено через 12 минут Вроде немного понял. Массив является обьектом класса Array (не Arrays). Но этот класс конкретно так 'запечатан' (приватный конструктор и куча native методов) Но все же, где быстрее обращение по индексу? или это нельзя узнать?
0
|
||
| 20.09.2013, 04:28 | |
|
Ответы с готовыми решениями:
11
Как получить доступ к элементу массива, который сам является элементом массива Доступ к элементу массива |
|
|
||||||||||||
| 20.09.2013, 12:05 | ||||||||||||
происходит такой алгоритм реализованный на С в нативках: get <адрес_массива_в_памяти> + <индекс_массива> * <размер_типа_данных> Не по теме: возможно получение 0 элемента и обгоняет на пару тактов, но это всё ) класс Array это специальный класс для Reflection с нативными методами для реализации поведения как у объекта примерно как у void
2
|
||||||||||||
|
ɐwʎ ɔ vǝmоɔ dиw ɐʚонɔ
|
|
| 20.09.2013, 12:09 | |
|
length это некая переменная (поле), которую вы пишите new int[100]
а время доступа, как мне кажется, к любому элементу будет одинаковое, ибо jvm четко понимает в какой области памяти какой номер
1
|
|
|
KeM6Pug}I{a
49 / 49 / 1
Регистрация: 23.08.2013
Сообщений: 202
|
|||||||
| 21.09.2013, 22:36 | |||||||
|
Вот примерно ваш алгоритм:
0
|
|||||||
|
127 / 125 / 16
Регистрация: 03.07.2011
Сообщений: 354
|
||
| 21.09.2013, 22:44 | ||
|
т.е если у вас указатель на int и вы к нему прибавите 1, то реально указатель увеличится на 4 (в 32х)
0
|
||
|
KeM6Pug}I{a
49 / 49 / 1
Регистрация: 23.08.2013
Сообщений: 202
|
||||||||
| 21.09.2013, 22:54 | ||||||||
get <адрес_массива_в_памяти> + <индекс_массива> * <размер_типа_данных> Добавлено через 1 минуту
0
|
||||||||
|
127 / 125 / 16
Регистрация: 03.07.2011
Сообщений: 354
|
|||
| 21.09.2013, 23:27 | |||
|
0
|
|||
|
127 / 131 / 11
Регистрация: 25.12.2011
Сообщений: 443
|
||
| 21.09.2013, 23:51 | ||
|
0
|
||
|
|
||
| 22.09.2013, 01:49 | ||
|
1. Вы совершенно правы по поводу иерархичности памяти, если массив уложится в кеш процессора по своему размеру, то скакать по нему можно будет очень быстро, но если массив настолько велик что он не умещается в кеше проца полностью, то возникнут потери времени на доступ в достаточно медленное ОЗУ по сравнению с кешем. 2. То есть дело не в патернах, а в собственно железе на котором выполняются замеры, поэтому один и тот же код может показать разные результаты на разных системах. 3. последовательный доступ всегда быстрее так как не надо умножать <размер_типа_данных> на индeкс, нужно просто сместиться на 1 шаг вперёд по памяти, естественно операция инкремента указателя происходит быстрее чем умножение. 4. Ну и самое сложное - современные камни имеют предсказатель переходов, и от того насколько ваш алгоритм доступа к элементам массива прогнозируемый тоже зависит скорость, так как на камне с несколькими ядрами в случае удачного предсказания, результат будет готов ещё до того как он вам понадобится.
1
|
||
|
462 / 462 / 71
Регистрация: 26.02.2013
Сообщений: 1,263
|
|||||||||||
| 24.09.2013, 12:53 | |||||||||||
|
не давала мне эта тема...покоя
и решил провести небольшой тестВот два примера, массив или лист размером 10 миллионов, но проходов по элементам в 10 раз больше. Seed поставил одинаковый, что бы генерировало каждый раз одинаковые последовательности, это можно будет наблюдать по сумме чисел. Кликните здесь для просмотра всего текста
Кликните здесь для просмотра всего текста
а вот результаты, числа это время по тесту, делал по 5 измерений ArrayList 20964 20758 20978 20931 21016 Array 20947 20603 20555 20689 20505 полагаю, время одинаковое потому что использовались объекты, а не примитивные типы, но я не знаю как заполнить ArrayList примитивами ![]() Для ясности я в первом примере вместо Integer сделал массив int - время выполнения в 2 раза быстрее Выводы оставляю сделать читателям. Троллинг и конструктивная критика приветствуется.
0
|
|||||||||||
|
KeM6Pug}I{a
49 / 49 / 1
Регистрация: 23.08.2013
Сообщений: 202
|
|
| 24.09.2013, 13:07 | |
|
Не понимаю зачем сверять массивы и Список реализованный на динамически расширяющимся массиве?
Если вы зарание знаете размер , то следовательно нужно использовать массив.
0
|
|
|
462 / 462 / 71
Регистрация: 26.02.2013
Сообщений: 1,263
|
|
| 24.09.2013, 13:27 | |
|
если это массив не примитивных типов то нет разницы что использовать - список или массив, это видно из результата теста, ваш кэп
но мне просто захотелось сравнить, для себя, будет ли разница между ними или нет...вот, сравнил
0
|
|
| 24.09.2013, 13:27 | |
|
Помогаю со студенческими работами здесь
12
Доступ к элементу массива структур
Доступ к элементу массива по уникальному имени Возврат массива и доступ к определённому элементу Доступ к элементу массива через указатель Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 11.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|