"আপনি যদি মনে করেন যে আমরা সমস্ত তালিকা ইন্টারফেসের সাথে সম্পন্ন করেছি, তাহলে আপনি ভুল করছেন। আমরা কেবল শুরু করছি। আমি আপনাকে লিঙ্কডলিস্ট এবং অ্যারেলিস্ট সংগ্রহ সম্পর্কে বলি।"
"আমি ArrayList সংগ্রহ দিয়ে শুরু করব।"
"এই সংগ্রহের উত্তরাধিকার চিত্রটি কেমন দেখাচ্ছে:"
"ইন্টারফেস সবুজ।"
"বিমূর্ত ক্লাস বেগুনি হয়।"
"সাধারণ ক্লাস লাল হয়।"
"সলিড লাইনগুলি উত্তরাধিকারের প্রতিনিধিত্ব করে এবং ড্যাশড লাইনগুলি ইন্টারফেস বাস্তবায়নের প্রতিনিধিত্ব করে।"
"এটি সবচেয়ে সহজ সংগ্রহ। একটি ArrayList এর ভিতরে , উপাদানগুলি একটি সাধারণ অ্যারেতে সংরক্ষণ করা হয়।"
"একটি অ্যারের উপর এই সংগ্রহের প্রাথমিক সুবিধা হল এটির প্রসারিত করার ক্ষমতা, অর্থাৎ প্রয়োজন অনুসারে এটির দৈর্ঘ্য বৃদ্ধি করার ক্ষমতা।"
"যদি অ্যারের স্থান ফুরিয়ে যায়, তাহলে একটি দ্বিতীয় বৃহত্তর অ্যারে তৈরি হয় এবং প্রথম অ্যারের সমস্ত উপাদান এতে অনুলিপি করা হয়। তারপর দ্বিতীয় অ্যারেটি প্রথমটির স্থান নেয় এবং প্রথমটি বাতিল করা হয় (এটি হবে আবর্জনা সংগ্রহকারী দ্বারা ধ্বংস করা হয়েছে)।"
"অ্যারেটি কত বড় হয়?"
"নতুন অ্যারের দৈর্ঘ্য (3*n)/2+1 হিসাবে গণনা করা হয়, যেখানে n হল পুরানো অ্যারের দৈর্ঘ্য। অন্য কথায়, যদি পুরানো অ্যারের 100 উপাদান লম্বা হয়, তাহলে নতুনটি 300/2+1 হবে = 151।"
"একটি ArrayList এর মাঝখানে একটি উপাদান যোগ করার সময়, যেখানে নতুন উপাদান সন্নিবেশ করা হবে তার ডানদিকে সমস্ত উপাদান ডানদিকে 1 অবস্থান কপি করা হয়, এবং তারপর নতুন উপাদানটি খালি ঘরে যোগ করা হয়।"
"মাঝখান থেকে একটি উপাদান সরানোর সময়, সেই উপাদানটির ডানদিকের সমস্ত উপাদান বাম দিকে 1 অবস্থান কপি করা হয়।"
"আপনি কি বলছেন যে ArrayList যখন আপনি এতে উপাদানগুলি যোগ করেন তখন এটি নিজেকে দীর্ঘ করে তোলে এবং আপনি উপাদানগুলি সরিয়ে দিলে এটি নিজেকে ছোট করে তোলে?"
"না, একটি ArrayList-এর ভিতরের অ্যারেটি কখনই নিজেকে ছোট করে না; তবে, আপনি একটি ArrayList কে তার অভ্যন্তরীণ অ্যারেকে trimToSize () পদ্ধতিতে কল করার মাধ্যমে তার অভ্যন্তরীণ অ্যারেকে সবচেয়ে ছোট আকারে সঙ্কুচিত করতে বাধ্য করতে পারেন৷ "
"এবং, অবশ্যই, আমি আপনাকে লিঙ্কডলিস্ট সম্পর্কে বলব।"
"এর উত্তরাধিকার চিত্রটি দেখতে কেমন তা এখানে:"
"ইন্টারফেস সবুজ।"
"বিমূর্ত ক্লাস বেগুনি হয়।"
"সাধারণ ক্লাস লাল হয়।"
"সলিড লাইনগুলি উত্তরাধিকারের প্রতিনিধিত্ব করে এবং ড্যাশড লাইনগুলি ইন্টারফেস বাস্তবায়নের প্রতিনিধিত্ব করে।"
"যেমন আপনি ইতিমধ্যেই জানেন, লিঙ্কডলিস্ট উপাদানগুলিকে লিঙ্ক করা তালিকা হিসাবে সঞ্চয় করে।"
"আমি এটা সব সময় শুনি, কিন্তু আপনি কি আমাকে বলতে পারেন এটা কি?"
"অবশ্যই।" এটা সহজ।"
"একটি লিঙ্কযুক্ত তালিকায় এমন উপাদান রয়েছে যা ক) ডেটা সংরক্ষণ করে এবং খ) পরবর্তী এবং পূর্ববর্তী উপাদানগুলির রেফারেন্স সংরক্ষণ করে।"
" এই ধরনের একটি উপাদানের জন্য ক্লাসটি স্ট্রিংস সংরক্ষণ করলে দেখতে কেমন হবে:"
উদাহরণ | বর্ণনা |
---|---|
|
ডেটা ক্ষেত্র উপাদানটির স্ট্রিং মান সংরক্ষণ করে । পরবর্তী ক্ষেত্র তালিকার পরবর্তী উপাদানের একটি রেফারেন্স সংরক্ষণ করে । পূর্ববর্তী ক্ষেত্র তালিকার পূর্ববর্তী উপাদানের একটি রেফারেন্স সংরক্ষণ করে। |
"এবং যদি আমরা একটি জেনেরিক টাইপ ঘোষণা ব্যবহার করি, তাহলে এটি দেখতে এরকম কিছু হবে:"
class LinkedListElement<T>
{
T data;
LinkedListElement<T> next;
LinkedListElement<T> previous;
}
"বুদ্ধি করে তোলে।"
"এটি আরও ভালভাবে বোঝার জন্য, আসুন কোড লিখি যেখানে আমরা একটি দ্বিগুণ-সংযুক্ত তালিকায় 10টি উপাদান যুক্ত করি:"
public static void main(String[] args)
{
LinkedListElement<Integer> tail; // The tail (very last element) of the list
for(int i = 0; i < 10; i++)
{
LinkedListElement<Integer> element = new LinkedListElement<Integer>();
element.data = i;
if (tail == null) // If the tail doesn't exist, then make our element the last element
{
tail = element;
}
else // if there is a tail, add the element
{
tail.next = element; // Set the next field on the tail element
element.previous = tail; // Add a reference to the tail to the new element
tail = element; // Make the new element the tail
}
}
}
"ভাবুন যে আমাদের তালিকায় 10টি উপাদান রয়েছে। মাঝখানে কীভাবে একটি উপাদান সন্নিবেশ করা যায় তা এখানে:"
"পরিবর্তিত লিঙ্কগুলিকে উজ্জ্বল লাল হাইলাইট করা হয়েছে । তারা এখন নতুন উপাদানের দিকে নির্দেশ করে।"
"নতুন লিঙ্কগুলি উজ্জ্বল বেগুনি হাইলাইট করা হয়েছে । তারা তার প্রতিবেশীদের সাথে নতুন উপাদানের লিঙ্ক।"
"এবং এখন কোড হিসাবে:"
// This field stores the element that is the head of the list
LinkedListElement<Integer> head = …
// Get the 4th element (counting from zero)
LinkedListElement<Integer> element4 = head.next.next.next.next;
// Get the 5th element
LinkedListElement<Integer> element5 = element4.next;
// Create the new element that we will insert
LinkedListElement<Integer> newElement = new LinkedListElement<Integer>();
newElement.data = -18;
// Replace the references in the element on the left
newElement.previous = element4;
element4.next = newElement;
// Replace the references in the element on the right
newElement.next = element5;
element5.previous = newElement;
"ধন্যবাদ, এলি। আমি অবশ্যই তালিকা সম্পর্কে অনেক নতুন জিনিস শিখেছি।"
GO TO FULL VERSION