একটি লিঙ্কযুক্ত তালিকায়, প্রতিটি উপাদানটির পরবর্তী উপাদানগুলির একটি পয়েন্টার থাকে:
head -> item1 -> item2 -> item3 -> etc.
অ্যাক্সেস করতে item3
, আপনি পরিষ্কারভাবে দেখতে পাচ্ছেন যে আইটেম 3 এ পৌঁছানো পর্যন্ত আপনাকে প্রতিটি নোড দিয়ে মাথা থেকে হাঁটাচলা করতে হবে, যেহেতু আপনি সরাসরি লাফাতে পারবেন না।
সুতরাং, আমি যদি প্রতিটি উপাদানটির মান মুদ্রণ করতে চাই, আমি যদি এটি লিখি:
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.
সমস্ত একক traversal, যা হয় O(N)
।
এখন, অন্য বাস্তবায়নের List
যা যা হয় ArrayList
, যে এক একটি সহজ অ্যারে দ্বারা সমর্থিত। সেক্ষেত্রে উপরের ট্র্যাভারসালগুলি উভয়ই সমতুল্য, যেহেতু একটি অ্যারেটি সংবিঘত তাই এটি এলোমেলোভাবে লাফিয়ে স্বেচ্ছাসেবী অবস্থানগুলিতে অনুমতি দেয়।