Skip to main content

Iterable and Collection (ইটারেবল এবং কালেকশন ) (পোষ্ট -১৪)







ছবিঃ javatpoint

উপরের যে ছবিটা দেখছেন, সেখানে একদম উপরে কে আছে? “Iterable” এটা একটা Interface , যাকে এক্সটেন্ড করেছে কে? “Collection” ,  এটাও একটা Interface ।

এখন “Iterable” কে যখন “Collection” এক্সটেন্ড করল তখন স্বাভাবিক ভাবেই “Iterable” এর বৈশিষ্ট্য গুলা “Collection” এর মধ্যে চলে আসবে, তাই নই কি?

তাহলে এখন পর্যন্ত কথা কি দাড়াচ্ছে? কালেকশন ইন্টারফেসের মধ্যে ২ জনের বৈশিষ্ট্য  আছে, একটা কালেকশনের নিজের বৈশিষ্ট্য, আরেকটা যেটা “Iterable” কে এক্সটেন্ড করার পর পেয়েছে।

আচ্ছা Iterable এর কাছে কি কি বৈশিষ্ট্য আছে?
একটাই মেথড আছে   iterator();

Iterable দিয়ে আমরা আমাদের লিস্ট , সেট বা কিউ(Queue) তে যেগুলা এলিমেন্ট থাকবে সেগুলা প্রিন্ট করতে পারব দ্রুত ,কারণ সাধারণ লুপ দিয়ে প্রিন্ট করতে গেলে সবগুলার ইন্ডেক্স মেইন্টেইন করতে হবে, ঝামেলা হবে, আবার অনেক সময় কমপ্লেক্সিটি বেশি হয়ে যায়, তাই for each লুপের মতো , iterator() ইউজ করতে হয়।
ধরেন,
“ArrayList<String> ar=new ArrayList<>();
ar.add(“Ahnaf”);
ar.add(“Orpa”);
ar.add(“Nova”);
//৩ টা এলিমেন্ট অ্যাড করসি, এখন প্রিন্ট করতে পারি কিভাবে?

for(String x: ar){
System.out.println(x);
}
আউটপুটঃ
Ahnaf
Orpa
Nova

উপরে Iterable  এর মেথড ইউজ করিনি, এটা for each loop ছিল,


Iterable দিয়ে এভাবে

“ArrayList<String> ar=new ArrayList<>();
ar.add(“Ahnaf”);
ar.add(“Orpa”);
ar.add(“Nova”);
//৩ টা এলিমেন্ট অ্যাড করসি, এখন প্রিন্ট করতে পারি কিভাবে?

Iterator itr=ar.iterator(); // ar এর iterator
while(itr.hasNext()){
System.out.println(itr.next());
}
আউটপুটঃ
Ahnaf
Orpa
Nova

তো এই যে প্রিন্ট করার মেথডটা  এটা দিয়ে কোনো লিস্টের সকল এলিমেন্ট সুন্দরভাবে প্রিন্ট করে দিতে পারি।

“Collection” যখন “Iterable” কে এক্সটেন্ড করেছে তখন প্রিন্ট করার এই বৈশিষ্ট্যও  “Collection” এর কাছে চলে এসেছে, এই বৈশিষ্ট্য তো “Iterable” ইন্টারফেসের থেকে পাওয়া, , কালেকশনের নিজস্ব কিছু বৈশিষ্ট্যও তো থাকবে, তাই না? কি কি আছে এর মধ্যে?

“Collection” ইন্টারফেসের কাছে ১৪ টা মেথড আছে, এদের কাজের উপর ডিপেন্ড করে কয়েকটি ভাগে ভাগ করা হয়েছে, যেমনঃ

è Basic operations
è Bulk operations
è Comparison operations
è Array operations
è Aggregate operations


v Basic Operations:
1.    add():  কোনো ভ্যালু অ্যাড করতে ব্যবহার করব।
2.    remove(): লাস্ট ইন্ডেক্সের ভ্যালু রিমুভ হবে।
3.    size(): লিস্টে কতগুলা এলিমেন্ট আছে এটা জানতে ব্যবহার হবে।
4.    isEmpty(): লিস্ট খালি কিনা চেক করবে, খালি হলে true রিটার্ন করবে।
5.    contains():  কোনো অবজেক্ট এই লিস্টে আছে কিনা চেক করবে, থাকলে true রিটার্ন করবে।



v Bulk Operations:  ‘bulk’ মানে স্তুপ, মানে একসাথে অনেক গুলা নিয়ে কাজ করবে তাই এদের নাম Bulk দিছে।

6.    addAll(): একটা কালেকশনের সকল ভ্যালু অন্য কালেকশনে অ্যাড করবে বা কপি করে দিবে।
7.    removeAll(): কোনো কালেকশনের সকল ভ্যালু রিমুভ করে দিবে।
8.    containsAll(): একটা কালেকশনের মধ্যে যদি অন্য একটা কালেকশনের সকল ভ্যালু থাকে তাহলে true নাহলে false রিটার্ন করবে।



v Comparison

9.    equals():  এটা চেক করবে ২টা অবজেক্ট একই কিনা, একই হলে true রিটার্ন করবে নাহলে  false
10.                       hashCode():  ২টা অবজেক্ট একই হলে তাদের hashCode() একই থাকে, আর এই কোড ইন্টিজার টাইপের, তাই ২টা অবজেক্ট এর hashCode() একই কিনা চেক করলেও হয়।


v Array Operations: লিস্টকে অ্যারে করতে চাইলে এই মেথড গুলা ইউজ করতে হয়।
11. toArray(): লিস্ট বা কালেকশনকে অ্যারে তে কনভার্ট করে দেয়।
12. toArray(T [ ] a): জেনেরিক টাইপ এটা, এটা ইউজ করে লিস্টকে যেকোনো টাইপ এ কনভার্ট করা যাবে।

v Aggregate Operations:
13. stream():
14. parallelStream():


এইগুলা ছিল “Collection” interface – এর ব্যক্তিগত বৈশিষ্ট্য ।
“Collection” iterable কে এক্সটেন্ড করে, আর Iterable এর বৈশিষ্ট্য একটাই ছিল iterator(); , যেটা  এক্সটেন্ড করার পর “কালেকশন” পেয়ে গেছে ।

তাহলে এখন কেউ যদি “Collection” ইন্টারফেসকে এক্সটেন্ড করে তাহলে সে, Iterable , Collection  ২ জনের ই বৈশিষ্ট্য পাবে।

ছবিতে দেখেন , Collection – কে এক্সটেন্ড করেছে
1.   List        2. Queue        3. Set 
তাহলে এদের মধ্যে (Collection, Iterable ) ২ জনের বৈশিষ্ট্য ই আছে

বংশগতির ধারণা দিয়ে বুঝতে সুবিধা হবে (maybe) , 




দাদু = Iteratable (দাদু)
বাবা = (দাদুর সব বৈশিষ্ট্য নিয়ে -> বাবা) Collection (বাবা)
ভাই-বোন= (বাবা+দাদুর বৈশিষ্ট্য নিয়ে -> ভাই বোন) List, Queue, Set (ভাই-বোন)
নাতি-নাত্নী=(আগের সবার বৈশিষ্ট্য  নিয়ে -> নাতি নাতনী) ArrayList, HashSet, TreeSet,PriorityQueue ইত্যাদি।
ভাই-বোনের মধ্যে List  এর বাচ্চাঃ
1.   ArrayList
2.   Stack
3.   Vector
4.   LinkedList
(কারণ এরা List কে ইমপ্লিমেন্ট করে)
ভাই-বোনের মধ্যে Set  এর বাচ্চাঃ
1.   HashSet
2.   LinkedHashSet
3.   TreeSet
(কারণ এরা Set কে ইমপ্লিমেন্ট করে)

ভাই-বোনের মধ্যে Queue  এর বাচ্চাঃ
1.   PriorityQueue
2.   LinkedList
3.   Deque
(কারণ এরা Queue কে ইমপ্লিমেন্ট করে)

তাহলে ভাই-বোনের বাচ্চা যেগুলা বা নাতি-নাতনী তাদের মধ্যে সবার বৈশিষ্ট্য থাকছে ।

এইটুকু জ্ঞান থাকলেই হবে আপতত, পরের পোস্ট গুলাই কাকে কখন, কিভাবে ইউজ করবেন এগুলা দেখব in sha Allah ।

Comments

Popular posts from this blog

IELTS Spoken Class Adminssion Scenario - 01

.......  Student: Hello, May I come in, sir ? Optional (student): May I sit ? Sir:  Please have a seat. Sir: How may I help you, Sir ? Student: I would like to admit in your spoken course. Sir: Oh sure. Student: How many days are there in a week ? Sir: There are three classes in a week. Student: What time do you offer class ? Sir: We have class at 11am / 4pm / 6pm / 8pm

Php Learning Time

 Differences of explode( ) and implode( ) in php: explode: একটা স্ট্রিংকে কোনো একটা সেপারেটরের বেসিসে অ্যারেতে কনভার্ট করে, যেমন  <?php $text="Hello How are you?"; print_r(explode(" ",$text)); ?> This will give output of  Array (     [0] => Hello     [1] => How     [2] => are     [3] => you? ) Differences of array_splice( ) and array_slice( ) ধরেন আসল অ্যারে হচ্ছে    $arr =[ "Hello" , "this" , "is" , "test" , "text" ];    এখন এটাকে স্লাইসিং করার জন্য আমরা উপরের দুইটা মেথড ই ব্যবহার করতে পারি , কিন্তু array_splice এটা ইউজ করলে অরজিনাল array ও চেঞ্জ হয়ে যাবে, মানে যদি আমরা এভাবে লিখি  $var2 = array_splice ( $arr , 0 , 2 );   তাইলে $var2 এর ভিতরে থাকবে ["Hello" , "this"] ,  আর অরজিনাল array তে বাকি থাকবে ["is", "test", "text"] কিন্তু যদি আমরা ইউজ করি তাহলে অরজিনাল array আগের মতোই থাকবে পাশাপাশি $var2 এর মধ্যে ভ্যালু গুলা এসে পড়বে  Array (     [0] => ...