Skip to main content

কালেকশন ফ্রেমওয়ার্ক কি? ( পোষ্ট -১৩ )



কালেকশন ফ্রেমওয়ার্ক কি?

কালেকশন মানেই তো বুঝছেন এইখানে কিছু একটার কালেকশন থাকবে, ঐযে ঈদের আগে বাজারে গেলে দোকানদার চিল্লা চিল্লি করে না, নতুন কালেকশন এসেছে, শুধু মাত্র আপনার জন্যই ঐরকম টাইপ আর কি। দোকানদারের কাছে নতুন জামা কাপড়ের কালেকশন থাকে।

তো এই  জাভা ফ্রেমওয়ার্কের  মধ্যে কিসের কালেকশন থাকবে?
এর কাছে কিছু গুরুত্বপূর্ণ ক্লাস , আর ইন্টারফেসের কালেকশন থাকবে। যেমনঃ 
 

ইন্টারফেস                                               ক্লাস

1.  List      কে implement করে  ->           1. ArrayList
                                                                2. LinkedList
                                                                3. Stack
                                                                4. Vector

2. Set       কে implement করে  ->          1. HashSet
                                                               2. LinkedHashSet
                                                               3. TreeSet

3. Queue  কে implement করে ->          1. Deque(Interface)
                                                               2. PriorityQueue

4. Deque  কে implement করে ->          1. LinkedList



তো এই জিনিসগুলো জাভার মধ্যে কেন এলো? এগুলা ছাড়াও দিব্বি আমাদের কাজ চলছিল। এগুলার প্রয়োজন টা বুঝাই,

আমাদের তো ডেটা নিয়েই কাজ করতে হয়, ডেটা হ্যান্ডেল করার কিছু নির্দিষ্ট প্রসেস আছে যেগুলার মাধ্যমে আমরা অনেক সহজেই ডেটা আক্সেস করতে পারি, চেঞ্জ করতে পারি ইত্যাদি ডেটা নিয়ে যতরকমের কাজ আছে সব করতে পারি, তো ধরেন আপনি যখন বড় কোনো প্রজেক্ট নিয়ে কাজ করবেন তখন প্রজেক্ট নিয়ে চিন্তা বাদ দিয়ে বার বার এই ধরনের কোড লিখা লাগবে, তো যাতে আপনি প্রজেক্ট নিয়েই ভালমতো চিন্তা করতে পারেন, আপনার সময় এইদিকে নষ্ট না হয়,  তাই জাভা এই কোড গুলা লিখে দিয়েছে আপনার জন্য।

আবার,

ধরেন আপনাকে বলা হলো একটা ভ্যারিয়েবল এর মধ্যে ১০ রাখো, আপনি কি করবেন?

int x=10;

রেখে দিলেন,

এখন আবার বলা হলো এই রকম ভ্যারিয়েবল আমার দশ হাজারটা লাগবে, আপনি কি করবেন?

int x[ ] =new int[10000];

তো আপনি একটা র‍্যে ঘোষণা করলেন দশ হাজার সাইজের, কিন্তু যিনি ব্যবহার করছেন দেখা গেল তার মাত্র ২টা র‍্যে দরকার পড়ল , তাহলে আপনার নয় হাজার নইশত আটানব্বই( ৯৯৯৮) এত গুলা র‍্যে হুদাই মেমরি দখল করে জায়গা নষ্ট
করল, (৯৯৯৮ * বাইট) এত গুলা মেমরি স্পেশ নষ্ট হচ্ছে এভাবে,

ঘটনা এমনও হতে পারত, মেমরি  যাতে নষ্ট না হয় তাই আপনি ১০০ সাইজের র‍্যে ঘোষণা করলেন, কিন্তু তখন আপনার দরকার পড়ছে ৫০০ সাইজের তখন ArrayIndexOutOfBounds এক্সেপশন দেখাবে।

তাই আমাদের এমন কিছু দরকার যেখানে আর‍্যে সাইজ ডাইনামিক্যালি চেঞ্জ হবে, মানে রানটাইমে আমাদের যত সাইজের র‍্যের দরকার হবে ততটুক মেমরি দখল করবে,

আবার আমরা ইচ্ছে মত ডেটা add(), remove(), get()  করতে পারব এমন কিছু।

উপরের সমস্যাকে মাথায় রেখেই ডাইনামিক র‍্যে হিসেবে List, Set , Queue ইত্যাদি এসেছে। তো ডাইনামিক র‍্যে পাইলাম ভাল কথা, কিন্তু এতকিছু কি এগুলা? কেমন জানি ভয়ানক সব নাম এদের, আচ্ছা  আপনি বলেন ডাইনামিক র‍্যে দিয়ে কি শুধু ডেটা add(), remove(), sort()  এগুলাই করবো? বার বার শুধু add() করবো আর remove() করবো add() করবো আর remove() করবো?   নাহ  

 সাধারন র‍্যেকে আমরা যখন যেভাবে দরকার সেভাবে ( sort করি, কোনো element remove করি, যেকোনো index এর ভ্যালু প্রিন্ট করি, র‍্যে ভ্যালুগুলা রিভার্স অর্ডারে প্রিন্ট করি, সাব র‍্যে বানাই distinct element খুজে বের করি ইত্যাদি )  ব্যবহার করি,  তাহলে এই ডাইনামিক র‍্যেকে কেন  নয়এটাকে ব্যবহারের বিভিন্ন উপায় Set, List, Queue ইত্যাদি ইত্যাদি এগুলার মধ্যে দেয়া আছে। আমরা কি কি করতে পারি এগুলাই  শিখবো কালেকশন ফ্রেমওয়ার্কের মধ্যে।

 অন্য বেশি কিছু কাজের সুবিধা পাইলে খারাপ কিএই যে উপরে এতগুলা class , এতগুলা Interface  দেখছেন এদের আলাদা আলদা সুবিধা আছে, এদের বেশির ভাগ আমাদেরডেটা স্ট্রাকচারকোর্সে  কোড ইমপ্লিমেন্ট করা শিখানো হবে,

আমরা যখন কোনো কাজ করব তখন যাতে  আমদের মেইন কাজ বাদ দিয়ে এই একই কোড বার বার না লিখতে হয়, তাই জাভা আমাদের সময় বাচানোর জন্য এগুলা লিখেই দিয়েছে, আমরা শুধু কল করব আর ইউজ করব।

এদের  নাম লিখেই আমরা এদের ব্যবহার করতে পারব, কিন্তু এদের কোড ইমপ্লিমেন্টেশনে কিছু পার্থ্যক্য আছেআপনার যখন যে কাজের প্রয়োজন হবে তখন ঐটা করার জন্য কোন কালেকশন ইউজ করলে বেশি ভাল হবে, বেশি ফাস্ট হবে এগুলা চিন্তা করে আপনি ইউজ করবেন। এগুলা আমাদের আপাতত জানার দরকার নাই। টপিকগুলা আলাদা ভাবে পড়ব তখন জেনে নিব।

পার্থক্য বলতে কি রকম? যেমনঃ আপনার প্রোগ্রামে যদি ভ্যালু add(), remove(), add( index, value),  এই টাইপের কাজ বেশি করতে হয় তাহলে আপনি ইউজ করবেন LinkedList

আর যদি বারবার ডেটাকে Access করতে হয় তখন ইউজ করবেন ArrayList (কেন করবেন এগুলা ArrayList , LinkedList  পড়ার সময় জানবো in sha Allah )

LinkedList কে এমন ভাবে বানানো হয়েছে , যাতে আপনি যখন add(), remove() করবেন তখন তাঁর কমপ্লেক্সিটি অন্যদের তুলনায় কম হয়।

একইভাবে অন্যদের ক্ষেত্রেও , তাই কখন কোনটা ইউজ করবেন এটা ঠিক করার জন্য আপনাকে এদের কমপ্লেক্সিটি জানতে হবে।
List ইন্টারফেসকে যারা ইমপ্লিমেন্ট করেছে( ArrayList, LinkedList etc)  তাদের মধ্যে একই ভ্যালু অনেকবার থাকতে পারবে,( মানে duplicate ভ্যালু allowed)
List1 =  1 ,2 ,3 ,2 ,4 ,5 ,3 ,2  // 2, 3, occurring more than once

কিন্তু যারা Set কে implement করবে তাদের( HashSet, LinkedHashSet, TreeSet ) মধ্যে Duplicate value থাকতে পারবে না।

এইরকম একেকজন একেকরকম  সুবিধা নিয়ে তৈরী, তাই নামগুলা দেখে ভয় পাইয়েন না, প্রথম প্রথম ঝামেলা মনে হতে পারে, পরে সব ক্লিয়ার হয়ে যাবে in sha Allah

আচ্ছা আরেকটা উদাহরণ দিয়ে আরেকটু ক্লিয়ার করার চেষ্টা করি,
ধরেন একটা ArrayList create করলেন এর মধ্যে আপনার পছন্দের কিছু Song এর নাম রাখলেন,

List<String> ar=new ArrayList<>();
ar.add(“Tumi Asmane thako provu”);
ar.add(“Meherban”);
ar.add(“Ami Jodi konodin”);

এখন আপনি চান এগুলা Alphabetical order   sort করতে, (মানে প্রথমে যার নামের শুরু  A  দিয়ে সে থাকবে, এর পরদিয়ে, C দিয়ে ... এভাবে) কিন্তু ArrayList এর মধ্যে sort করার কোনো মেথড নাই,

ArrayList কিন্তু কালেকশনের একমাত্র কালেকশনের অবজেক্ট নাআপনি খুজছেন যে sort করার মত কিছু আছে নাকি কালেকশন ইন্টারফেসের মধ্যে, তখন আপনি TreeSet নামক ক্লাসের সন্ধান পাবেন

TreeSet:- ইনপুট যেভাবেই দেন ,প্রিন্ট করার সময় সর্ট করেই আউটপুট দিবে, আর ডুপ্লিকেট ভ্যালু নিবে না।

LinkedList:- ভ্যালু add, remove, নির্দিষ্ট কোনো ইনডেক্সে ভ্যালু add  এগুলা efficiently করে।

HashMap:-  ক্লাসে যেমন আপনার রোল ধরে ডাকলে আপনিইয়েস স্যারবলে চিল্লাইতেন এটাও এমন, ভ্যালু এর সাথে এক্সট্রা একটা  key ভ্যালু নিবে, key ধরে ডাক দিবেন ভ্যালু দিয়ে দিবে।

HashSet:- ডুপ্লিকেট ভ্যালু নিবে না, ভ্যালু জলদি খুজে দিবে।

LinkedHashMap:- এটা HashMap  এর মতোই , কিন্তু ভিতরের কনফিগারেশন LinkedList এর মতো।

হ্যাঁ, উপরের ArrayList কে sort করার জন্য Collections.sort(ar);   লাইনটা লিখে দিলেই সর্ট হয়ে যাবে

পরের পোষ্ট গুলাই টপিক ওয়াইজ এগুলা জানার চেষ্টা করব ইনশাআল্লাহ


 ছবিঃ javatpoint










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] => ...