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