पाठ 33 / 38

ArrayList बनाम LinkedList

दो सामान्य 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।

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