Какова временная сложность доступа к элементу в ArrayList по индексу?

Ответ

Сложность — O(1).

Почему? ArrayList реализован на основе обычного массива. Доступ по индексу выполняется за константное время благодаря прямой адресации: array[index].

Пример:

ArrayList<String> list = new ArrayList<>();
list.add("A");
list.add("B");
list.add("C");

String element = list.get(1); // O(1) - мгновенный доступ ко второму элементу

Важное уточнение: Эта сложность относится только к доступу по индексу (get(index)). Поиск элемента по значению (indexOf(), contains()) имеет сложность O(n), так как требует последовательного перебора.

Ответ 18+ 🔞

А, слушай, тут один чувак пытался мне впарить, что ArrayList.get(index) — это типа O(n). Я чуть со стула не упал, блядь! Ну ты представляешь? Полный пиздец в голове!

Так вот, запомни раз и навсегда, как "Отче наш": доступ по индексу в ArrayList — это O(1), константа, мгновенно, на раз-два!

Почему? Да потому что внутри этой штуковины — обычный, преисподней старый массив! Ты когда пишешь list.get(5), Java не бежит туда пешком через все элементы, она сразу, сука, прыгает по адресу: начало_массива + (5 * размер_объекта). И всё! Хуй с горы — элемент у тебя в руках. Это как знать точный адрес хаты, а не ходить по всему кварталу и в каждое окно стучать.

Смотри, как это просто, ёпта:

ArrayList<String> list = new ArrayList<>();
list.add("A"); // Положили
list.add("B"); // Положили
list.add("C"); // Положили

String element = list.get(1); // O(1) - взяли прямо со второй полки! Ничего не искали!

Вот и вся магия. Но, блядь, внимание, важный момент, а то опять накосячишь!

Эта волшебная сложность O(1) работает ТОЛЬКО ДЛЯ .get(index) — когда ты тычешь пальцем в конкретное место.

А вот если ты начнёшь искать элемент по значению через list.indexOf("B") или list.contains("B") — вот тут-то и начинается пиздец, парень! Это уже O(n), потому что бедному процессору придётся, сука, потрахаться, перебирая все элементы с начала до конца, пока не найдёт нужный. Это как искать одну конкретную мартышлюшку в обезьяннике — придётся всех пересмотреть.

Короче, резюмирую: по индексу взял — O(1), быстро. По значению ищешь — O(n), можешь заебёшься. Запомни и не путай, а то будет тебе чих-пых в сраку на собеседовании!