"হাই, অ্যামিগো!"

"হাই, এলি!"

"আজ আমরা একবার এবং সব জন্য সংগ্রহের কাঠামোর চারপাশে আমাদের মাথা মোড়ানো যাচ্ছি।"

"আমি এটির জন্য দীর্ঘ সময় অপেক্ষা করেছি।"

"আপনি ইতিমধ্যেই জানেন যে সংগ্রহগুলি কী, এবং আপনি জানেন কীভাবে তাদের সাথে কাজ করতে হয়। আপনার জ্ঞানকে একটি কঠোর ব্যবস্থায় সংগঠিত করার সময় এসেছে। তারপর অনেক 'কেন' এবং 'কীভাবে' প্রশ্ন চলে যাবে, এবং বেশিরভাগ জিনিসই স্পষ্ট হয়ে যাবে।"

" সংগ্রহ ইন্টারফেস । সংগ্রহের ইন্টারফেসের উত্তরাধিকার কাঠামো দেখতে এইরকম কিছু:"

সংগ্রহের ইন্টারফেস - 1

দুটি জিনিস লক্ষ্য করুন।

প্রথমত, আপনি এখানে যা দেখছেন তা হল একটি ইন্টারফেস।

দ্বিতীয়ত, তীর মানে "উত্তরাধিকারী"।

"অন্য কথায়, তালিকা, সেট এবং সারি সংগ্রহের উত্তরাধিকারী, কিন্তু মানচিত্র নয়?"

হ্যা  _ _

"তুমি সঠিক."

"এখন দেখা যাক এই ইন্টারফেসের পদ্ধতিগুলি কিসের জন্য:"

পুনরাবৃত্তিযোগ্য পদ্ধতি <E>: ইন্টারফেস:

পদ্ধতি বর্ণনা
Iterator<T> iterator(); একটি পুনরাবৃত্তিকারী বস্তু প্রদান করে।

"এটি যথেষ্ট বলে মনে হচ্ছে না।"

"আচ্ছা, সেখানে কয়টি আছে। এটি সবই পুনরাবৃত্তিকারীদের জন্য। আমরা এখনই তাদের কভার করব না, তবে আমরা শীঘ্রই তাদের বিস্তারিত কভার করব।"

সংগ্রহের পদ্ধতি <E>: ইন্টারফেস:

পদ্ধতি বর্ণনা
boolean add(E e); সংগ্রহে একটি উপাদান যোগ করে
boolean addAll(Collection<? extends E> c); সংগ্রহে উপাদান যোগ করে
void clear(); সংগ্রহ থেকে সমস্ত উপাদান সরান
boolean contains(Object o); সংগ্রহে উপাদান আছে কিনা তা পরীক্ষা করে।
boolean containsAll(Collection<?> c); সংগ্রহে উপাদান রয়েছে কিনা তা পরীক্ষা করে।
boolean equals(Object o); সংগ্রহগুলি সমতুল্য কিনা তা পরীক্ষা করে
int hashCode(); হ্যাশ কোড ফেরত দেয়
boolean isEmpty(); সংগ্রহটি খালি কিনা তা পরীক্ষা করে দেখুন।
Iterator<E> iterator(); একটি পুনরাবৃত্তিকারী বস্তু প্রদান করে
boolean remove(Object o); সংগ্রহ থেকে একটি উপাদান সরান
boolean removeAll(Collection<?> c); সংগ্রহ থেকে উপাদান সরান
boolean retainAll(Collection<?> c); সি-তে নেই এমন সমস্ত উপাদান সরিয়ে দেয়
int size(); সংগ্রহের আকার প্রদান করে
Object[] toArray(); সংগ্রহটিকে একটি অ্যারেতে রূপান্তর করে
<T> T[] toArray(T[] a); সংগ্রহটিকে একটি অ্যারেতে রূপান্তর করে

"আমি ইতিমধ্যে এখানে সবকিছুর উপর দৃঢ়। আমি এই পদ্ধতিগুলির অর্ধেক ব্যবহার করেছি, এবং আমি বাকি অর্ধেক সম্মুখীন হয়েছি।"

"দারুণ, তারপর চালিয়ে যাওয়া যাক।"

তালিকার পদ্ধতি  <E>: ইন্টারফেস:

পদ্ধতি বর্ণনা
void add(int index, E element); সংগ্রহের মাঝখানে উপাদান যোগ করে
boolean addAll(int index, Collection<? extends E> c); সংগ্রহে উপাদান যোগ করে
E get(int index); সূচক দ্বারা একটি উপাদান প্রদান করে
int indexOf(Object o); একটি উপাদানের সূচক (সংখ্যা) প্রদান করে
int lastIndexOf(Object o); শেষ উপাদানের সূচী প্রদান করে।
ListIterator<E> listIterator(); তালিকার জন্য একটি পুনরাবৃত্তিকারী প্রদান করে
ListIterator<E> listIterator(int index); তালিকার জন্য একটি পুনরাবৃত্তিকারী প্রদান করে
E remove(int index); একটি উপাদানকে তার সূচক দ্বারা সরিয়ে দেয়
E set(int index, E element); সূচক দ্বারা একটি নতুন মান সেট করে
List<E> subList(int fromIndex, int toIndex); একটি উপসংগ্রহ প্রদান করে

"এখানেও মৌলিকভাবে নতুন কিছু নেই। আমি ইতিমধ্যেই সংগ্রহ সম্পর্কে প্রায় সবকিছুই জানি, যা আমি সাহায্য করতে পারি না কিন্তু খুশি হতে পারি।"

"ঠিক আছে, আমি মনে করি আমি এমন কিছু খুঁজে পেতে পারি যা আপনাকে অবাক করে দেবে। তবে আসুন ইন্টারফেসগুলি পরীক্ষা করা চালিয়ে যাওয়া যাক:"

সেটের পদ্ধতি <E>: ইন্টারফেস:

পদ্ধতি বর্ণনা
কোন পদ্ধতি নেই

"সেট ইন্টারফেসের কোন নতুন পদ্ধতি নেই - শুধুমাত্র সেইগুলি যা এটি উত্তরাধিকারসূত্রে পেয়েছে।"

"হ্যাঁ, আমি দেখেছি যে ইন্টারেবল ইন্টারফেসেও কিছু নেই।

"অন্যদিকে, কম পদ্ধতি মানে মনে রাখা কম!"

"আপনার জীবন-নিশ্চিত আশাবাদ আমাকে খুশি করে।"

"সেট ইন্টারফেসটি পদ্ধতি সহ দুটি ইন্টারফেস দ্বারা উত্তরাধিকারসূত্রে পাওয়া যায়: SortedSet এবং NavigableSet। কিন্তু আমি সেগুলির উপর যাব না, বা আমরা কখনই শেষ করব না।"

"পরিবর্তে, আমি আপনাকে ক্লাস এবং ইন্টারফেসের একটি সাধারণ ছবি দিই যা জাভাতে সংগ্রহগুলি বর্ণনা করে।"

"এটা নিয়ে এসো।"

"তাহলে শক্ত করে ধরো:"

সংগ্রহ ইন্টারফেস - 2

"বাহ, এটা বিশাল!"

"ঠিক আছে, এটা এত বড় নয়। এছাড়াও, মনে রাখবেন যে বিমূর্ত ক্লাসগুলি সম্পূর্ণরূপে ঐচ্ছিক। তবে কোন ক্লাস কোন ইন্টারফেস প্রয়োগ করে তা মনে রাখা ভাল। এটি প্রায়শই কাজে আসতে পারে।"

"ওহ, আমি এটাও লক্ষ করতে চাই যে কিছু সংগ্রহ অপ্রচলিত বলে বিবেচিত হয়।"

"এগুলো কোনটি?"

"আমি ভেক্টর, স্ট্যাক, ডিকশনারি এবং হ্যাশটেবল ক্লাসের কথা বলছি। এগুলো সাধারণ সংগ্রহের সিঙ্ক্রোনাইজড (থ্রেড-সেফ) সংস্করণ।"

"কিন্তু জাভা অনেকগুলি সংগ্রহের সাথে  একটি বিশেষ কনকারেন্সি লাইব্রেরি যোগ করেছে যা শুধুমাত্র অন্যান্য থ্রেড থেকে অ্যাক্সেস করা যায় না, এর সাথে অনেক বেশি কার্যকরী বাস্তবায়নও রয়েছে৷ ConcurrentHashMap হ্যাশটেবলের চেয়ে অনেক বেশি দক্ষ ।"

"আপনি ভেক্টর, স্ট্যাক, অভিধান এবং হ্যাশটেবল সংগ্রহগুলি ব্যবহার করতে পারেন তবে এটি সুপারিশ করা হয় না।"

"বুঝলাম, মনে রাখব।"

"ধন্যবাদ, এলি!"