# ArrayList बनाम LinkedList — कोर जावा

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

> दो सामान्य List implementation की तुलना करें कि ये डेटा कैसे संग्रहित करते हैं और इसका random access बनाम insertion/removal प्रदर्शन पर क्या असर है।

## बैकिंग स्टोरेज

`ArrayList` एक resizable array पर आधारित है — `get(i)` O(1) है, पर बीच में डालना/हटाना उसके बाद के हर तत्व को खिसकाता है (O(n))। `LinkedList` एक doubly-linked list है — किसी ज्ञात नोड पर जोड़ना/हटाना O(1) है, पर `get(i)` को एक छोर से चलना पड़ता है (O(n))।

## उपयोग पैटर्न से चुनें

डिफ़ॉल्ट रूप से `ArrayList` चुनें — यह कैश-फ़्रेंडली है और अधिकतर मामलों को कवर करता है। `LinkedList` (या बेहतर, `ArrayDeque`) तभी चुनें जब सिरों पर बार-बार जोड़ना/हटाना हो, जैसे queue या 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
```
