Комментарии 9
более быстрый доступ к элементам списка в процессе чтения, записи и удаления
А где тесты на JMH для каждого из случаев? Желательно на разных размерах: 10, 1 000, 1 000 000, 100 000 000
И для разных случаев: sequential access, random access.
— вставка в начало, в конец, в середину
— удаление элементов в начало, в конец, в середину
— удаление элементов в начало, в конец, в середину
Добавлены тесты jmh benchmark
Спасибо. То есть вот эта фраза из поста «более быстрый доступ к элементам списка в процессе чтения, записи и удаления» на самом деле превращается в «более быстрое добавление/удаление в начале/середине».
Теперь финт ушами: для этих конкретных задач все равно ArrayList подходит больше, если эти операции выразить через добавление в конец и чтение задом наперед. Например, для добавления в середину можно использовать 2 ArrayList, а при чтении объединять.
Потому что стандартные коллекции Java предельно оптимизированы, и используют приемы, недоступные обычному программисту, типа JIT оптимизации.
Теперь финт ушами: для этих конкретных задач все равно ArrayList подходит больше, если эти операции выразить через добавление в конец и чтение задом наперед. Например, для добавления в середину можно использовать 2 ArrayList, а при чтении объединять.
Потому что стандартные коллекции Java предельно оптимизированы, и используют приемы, недоступные обычному программисту, типа JIT оптимизации.
Вы в одном тесте замеряете время доступа по индексу, вставку, удаление одновременно. Вместе с этим вы замеряете время работы генерации псевдослучайных чисел.
Как минимум операции доступа и изменения коллекции нужно разбить на разные тесты. Доступ по индексу однозначно будет в разы хуже, чем в ArrayList, т.к. вместо 1 операции взятия элемента из массива, нужно будет сначала из индекса (data) взять данные, и лишь потом из elementData.
И как советовали выше, используйте JMH для тестов.
Как минимум операции доступа и изменения коллекции нужно разбить на разные тесты. Доступ по индексу однозначно будет в разы хуже, чем в ArrayList, т.к. вместо 1 операции взятия элемента из массива, нужно будет сначала из индекса (data) взять данные, и лишь потом из elementData.
И как советовали выше, используйте JMH для тестов.
И, где же iterate? по последовательным и по случайным? И как бы даже из приведённых benchmark-ов — вывод очень неоднозначный
Возникает ощущение, что Вы пытались придумать std::deque. Думаю, поглядеть его реализацию в GCC/Clang будет полезным.
Спасибо за добавленные JMH тесты, выглядит лучше. Но попробуйте поменять единицы измерения на op/sec, это будет нагляднее при данного рода тестах.
Как вариант, можно еще добавить столбец сравнения с LinkedList (на него будет ориентир при вставках в начало и середину).
Как вариант, можно еще добавить столбец сравнения с LinkedList (на него будет ориентир при вставках в начало и середину).
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Разработка коллекции на основе матрицы