लिंक की गई सूची में, प्रत्येक तत्व में अगले तत्व के लिए एक संकेतक है:
head -> item1 -> item2 -> item3 -> etc.
उपयोग करने के लिए item3
, आप स्पष्ट रूप से देख सकते हैं कि आपको आइटम नोड तक पहुंचने तक प्रत्येक नोड से सिर तक चलने की आवश्यकता है, क्योंकि आप सीधे कूद नहीं सकते हैं।
इस प्रकार, यदि मैं प्रत्येक तत्व के मूल्य को प्रिंट करना चाहता हूं, अगर मैं यह लिखता हूं:
for(int i = 0; i < 4; i++) {
System.out.println(list.get(i));
}
क्या होता है:
head -> print head
head -> item1 -> print item1
head -> item1 -> item2 -> print item2
head -> item1 -> item2 -> item3 print item3
यह बहुत ही अयोग्य है क्योंकि हर बार जब आप इसे सूचीबद्ध करते हैं तो यह सूची की शुरुआत से फिर से शुरू होता है और हर वस्तु से गुजरता है। इसका मतलब यह है कि आपकी जटिलता प्रभावी रूप से O(N^2)
केवल सूची को पार करने के लिए है!
अगर इसके बजाय मैंने ऐसा किया:
for(String s: list) {
System.out.println(s);
}
फिर क्या होता है:
head -> print head -> item1 -> print item1 -> item2 -> print item2 etc.
सभी एक ही त्रैमासिक में, जो है O(N)
।
अब, अन्य कार्यान्वयन के लिए जा रहा List
है ArrayList
, कि एक सरल सरणी द्वारा समर्थित है। उस मामले में उपरोक्त दोनों ट्रैवर्सल्स बराबर हैं, क्योंकि एक सरणी सन्निहित है इसलिए यह अनियंत्रित पदों पर यादृच्छिक कूदता है।