# ArrayList vs LinkedList — Core Java

Source: https://www.geekswithgeeks.com/en/core-java/java-list-implementations

> Compare the two common List implementations by how they store data and what that means for random access versus insertion/removal performance.

## Backing storage

`ArrayList` is backed by a resizable array — `get(i)` is O(1), but inserting/removing in the middle shifts every element after it (O(n)). `LinkedList` is a doubly-linked list — adding/removing at a known node is O(1), but `get(i)` must walk from an end (O(n)).

## Pick by usage pattern

Default to `ArrayList` — it's cache-friendly and covers most cases. Reach for `LinkedList` (or better, `ArrayDeque`) only when you need frequent insertions/removals at the ends, like a queue or stack.

```java
List<Integer> fast = new ArrayList<>();   // random access, append
Deque<Integer> stack = new ArrayDeque<>(); // push/pop at ends

stack.push(1); stack.push(2);
System.out.println(stack.pop());   // 2
```
