1. কিভাবে ArrayListগঠন করা হয়
ArrayListজাভা ক্লাস উপাদান সংরক্ষণের জন্য সবচেয়ে বেশি ব্যবহৃত হয়। তাই কিভাবে ArrayListকাজ করে এবং কেন সবাই এটি এত পছন্দ করে?
এর গঠন ArrayListসহজ এবং বুদ্ধিমান। প্রতিটি ArrayListবস্তুর দুটি ক্ষেত্র রয়েছে:
- উপাদান একটি অ্যারে
- একটি
sizeপরিবর্তনশীল, যা তালিকায় উপাদানের সংখ্যা সংরক্ষণ করে
অভ্যন্তরীণভাবে, একটি ArrayListবস্তুর মধ্যে একটি সবচেয়ে সাধারণ অ্যারে থাকে! কিন্তু এখানেই শেষ নয়. এছাড়াও একটি আকার পরিবর্তনশীল আছে , যা তালিকার দৈর্ঘ্য সংরক্ষণ করে। এটা এভাবে কাজ করে:
প্রাথমিকভাবে, তালিকার ভিতরে অ্যারের দৈর্ঘ্য 10। এবং ভেরিয়েবলটি size0।
আপনি যদি তালিকায় একটি উপাদান যোগ করেন তবে এটি অ্যারের 0 তম ঘরে সংরক্ষণ করা হবে এবং size1 এ বৃদ্ধি পাবে।
আপনি যদি আরও একটি উপাদান যোগ করেন তবে এটি 1ম ঘরে সংরক্ষণ করা হবে এবং sizeআবার 1 দ্বারা বৃদ্ধি পাবে এবং দুটির সমান হবে।
অ্যারেতে আর কোন স্থান না থাকলে আপনি যদি অন্য উপাদান যোগ করেন, তাহলে পদ্ধতিতে নিম্নলিখিতটি ঘটে add():
- একটি নতুন অ্যারে তৈরি করা হয়েছে যা আগেরটির দৈর্ঘ্যের দেড় গুণ
- পুরানো অ্যারের সমস্ত উপাদান নতুন অ্যারেতে অনুলিপি করা হয়।
- অবজেক্টে
ArrayList, নতুন অ্যারের একটি রেফারেন্স পুরানোটির রেফারেন্স প্রতিস্থাপন করে । - পাস করা উপাদানটি নতুন অ্যারের 10 তম ঘরে সংরক্ষিত হয়।
- আকার পরিবর্তনশীল 1 দ্বারা বৃদ্ধি পায় এবং এখন 11 এর সমান হবে
তালিকার মাঝখানে একটি উপাদান যোগ করার সময় (ঢোকানো) একই রকম কিছু ঘটে। বিদ্যমান উপাদানগুলি 1 দ্বারা ডানদিকে স্থানান্তরিত হয় এবং পাস করা উপাদানটি অ্যারের সদ্য মুক্ত কক্ষে লেখা হয়।
এখন আমরা তালিকার সাথে জড়িত সবচেয়ে মৌলিক পরিস্থিতি বিবেচনা করব:
2. একটিতে একটি উপাদান যোগ করাArrayList
তালিকায় উপাদান যোগ করা হলে এর ভিতরে কী ঘটে তা একবার দেখে নেওয়া যাক। একটি ArrayList অবজেক্ট তৈরি হওয়ার পরপরই, আমাদের মেমরিতে এরকম কিছু আছে:

আমাদের কাছে একটি ArrayListবস্তু রয়েছে যাতে দুটি ক্ষেত্র (দুটি ভেরিয়েবল): একটি ধারক (অ্যারে data) এবং সংরক্ষিত উপাদানের সংখ্যা ( size)। ভেরিয়েবলটি dataএকটি ধারক (অ্যারে) এর একটি রেফারেন্স সংরক্ষণ করে যা 10টি উপাদান সংরক্ষণ করতে পারে।
যদি আমরা অ্যারেতে 5 নম্বর যোগ করার সিদ্ধান্ত নিই, তাহলে আমরা নিম্নলিখিত চিত্রটি পাই:

অ্যারে এখন উপাদান 5, এবং সংরক্ষণ করে size == 1।
যদি কেউ এখন size()আমাদের ArrayListঅবজেক্টে মেথডটিকে কল করে, তাহলে রিটার্ন মান হবে তালিকায় সংরক্ষিত উপাদানের সংখ্যা: 1. তালিকার উপাদানের সংখ্যা অ্যারের স্টোরেজ ক্ষমতার সমান নয়।
ArrayListবর্তমান স্টোরেজ ক্ষমতা বা অ্যারে নিজেই বস্তুর বাইরে অ্যাক্সেসযোগ্য (দৃশ্যমান) হবে না । এটি ArrayListএর অভ্যন্তরীণ ডেটা এবং সর্বদা থাকবে৷
তালিকায় আরও 7টি সংখ্যা যোগ করা যাক: 10, 20, 30, 40, 50, 60, 70।
এখন মেমরি এই মত দেখাবে:

আপনি যদি size()এখন পদ্ধতিটি কল করেন, এটি 8 নম্বরটি ফেরত দেবে, যা তালিকার উপাদানগুলির নতুন সংখ্যা। অভ্যন্তরীণ অ্যারের আকারের সাথে এই মানটির কোন সম্পর্ক নেই।
এই ছবিতে একটি অতি সরলীকরণ আছে।
ক্লাসটি ArrayListআদিম প্রকারগুলি সঞ্চয় করতে পারে না, তাই এটি Integerটাইপ এর পরিবর্তে ব্যবহার করে int। ধারকটি সরাসরি {5, 10, 20, 30, 40, 50, 60, 70} মান সংরক্ষণ করে না, বরং বস্তুর উল্লেখ করে Integer। কন্টেইনার স্টোরের সব খালি ঘর null।
3. একটি তালিকার দৈর্ঘ্য বৃদ্ধি
একটি তালিকার অভ্যন্তরীণ অ্যারেতে আর কোনও খালি সেল না থাকলে তার মধ্যে কী ঘটে তা একবার দেখে নেওয়া যাক।
ধরুন আমাদের 10টি উপাদানের একটি তালিকা রয়েছে:

আমরা এটিতে 100 নম্বর যোগ করার সিদ্ধান্ত নিয়েছি । এই পদ্ধতিতে যা ঘটে add():
ধাপ 1 - একটি নতুন অ্যারে তৈরি করুন:

ধাপ 2 - পুরানো অ্যারে থেকে নতুনটিতে সমস্ত উপাদান অনুলিপি করুন:

ধাপ 3 — পুরানো অ্যারে প্রতিস্থাপন করুন (অবজেক্টের অভ্যন্তরীণ অ্যারের রেফারেন্স পরিবর্তন করুন ArrayList):

ধাপ 4 — নতুন নম্বর যোগ করুন, যা আমরা সম্পন্ন করতে এত কঠোর পরিশ্রম করেছি:

GO TO FULL VERSION