Ваш вопрос: Если оба списка имеют O (n) производительность метода contains, почему LinkedList в 3 раза хуже?
Это не противоречит правилу сложности O (n), рассмотрите O (n ) как что-то, что описывает алгоритм с линейным временем. Вопреки тому, что вы думаете, это не означает, что все реализации этого алгоритма имеют одинаковую скорость. Это означает, что время, которое они занимают, является линейной функцией их входных данных, здесь ArrayList
в три раза быстрее, но если вы увеличите количество элементов в List
, вы увидите, что ArrayList
все равно в три раза быстрее, а время для итерации обоих из них растет как линейная функция количества элементов в List
. Итак, если вы скажете, что Arraylist
требуется 2n для выполнения этой функции, а LinkedList
требует 10000n для выполнения этой функции, вы можете сказать, что они оба работают за O (n).
Здесь вы точно пришли к такому выводу, что LikedList
в три раза хуже, это означает, что они имеют одинаковую сложность O (n).
Но если, увеличивая количество входных данных, вы обнаружите, что он больше не в 3 раза хуже, а становится 5 раз хуже или в 30 раз хуже, и это число растет в зависимости от количества входных данных (которое равно n), они не имеют одинаковой сложности O (n).