Ответ
Метод get() присутствует в ArrayList благодаря реализации интерфейса List<E>, который объявляет этот метод как обязательный для доступа к элементам по индексу.
Иерархия интерфейсов:
Iterable<E> (итерация)
↓
Collection<E> (базовые операции коллекции)
↓
List<E> (упорядоченная коллекция с доступом по индексу)
↓
ArrayList<E> (реализация на основе массива)
Реализация в ArrayList:
public E get(int index) {
// Проверка выхода за границы (с Java 9)
Objects.checkIndex(index, size);
// Прямой доступ к элементу массива - O(1)
return elementData[index];
}
Ключевые особенности:
- Сложность O(1) - доступ к элементу происходит за константное время, так как используется обычный массив
- Проверка границ - метод проверяет, что индекс находится в диапазоне [0, size-1]
- Type safety - благодаря дженерикам, возвращаемый тип соответствует типу коллекции
Пример использования:
List<String> list = new ArrayList<>(Arrays.asList("A", "B", "C"));
String element = list.get(1); // "B" - получение за O(1)
// Сравнение с LinkedList (реализация get() через итерацию)
List<String> linkedList = new LinkedList<>(list);
String linkedElement = linkedList.get(1); // O(n) - требует обхода
Важно: Метод get() выбрасывает IndexOutOfBoundsException, если индекс выходит за пределы списка.