কম্পিউটার

অগ্রাধিকার সারি জাভা

জাভাতে কীভাবে অগ্রাধিকার সারি ব্যবহার করবেন

ডেটা স্ট্রাকচার তৈরি করতে প্রোগ্রামিং-এ অগ্রাধিকার সারি ব্যবহার করা হয় যেখানে সর্বোচ্চ মানের ডেটার আইটেমটিকে প্রথমে স্ট্রাকচার দ্বারা প্রক্রিয়া করা উচিত।

আপনি যখন জাভাতে কোডিং করছেন, তখন আপনি এমন একটি পরিস্থিতির সম্মুখীন হতে পারেন যেখানে আপনি একটি অগ্রাধিকার সারি বাস্তবায়ন করতে চান। সেখানেই জাভা কিউ ইন্টারফেস আসে। তবে, যেহেতু সারি একটি ইন্টারফেস, আপনি এটি সরাসরি আপনার কোডে প্রয়োগ করতে পারবেন না। আপনি যদি হিপ ডেটা স্ট্রাকচারের সাথে একটি অগ্রাধিকার সারি তৈরি করতে চান তবে আপনি পরিবর্তে অগ্রাধিকার সারি ব্যবহার করতে চাইবেন৷

এই টিউটোরিয়ালটি জাভাতে PriorityQueue-এর মৌলিক বিষয় নিয়ে আলোচনা করবে এবং কীভাবে একটি সারি তৈরি করতে হয় তা অন্বেষণ করবে। এই টিউটোরিয়ালটি PriorityQueue দ্বারা অফার করা প্রধান পদ্ধতিগুলিও অন্বেষণ করবে যা সারির বিষয়বস্তু পুনরুদ্ধার এবং ম্যানিপুলেট করতে ব্যবহার করা যেতে পারে৷

জাভা সারি এবং অগ্রাধিকার সারিগুলি

স্ট্যাকের মতো সারিগুলি হল ডেটা স্ট্রাকচার যার একটি নির্দিষ্ট ক্রম থাকে যেখানে অপারেশনগুলি সঞ্চালিত হয়। সারিগুলির ক্ষেত্রে, অপারেশনগুলি ফার্স্ট-ইন, ফার্স্ট-আউট (FIFO) ক্রমে সঞ্চালিত হয়। এর মানে হল যে তালিকার প্রথম আইটেমটি সর্বদাই প্রথম হবে — সারিতে সাজানো হয়েছে উপাদানগুলির ক্রমানুসারে যেমন সেগুলি ঢোকানো হয়েছে৷

ধরুন আপনি একটি রেস্টুরেন্টে আছেন, এবং আপনি একটি অর্ডার দিয়েছেন। প্রতিটি গ্রাহক যখন তাদের খাবারের অর্ডার দেয় তখন আপনি সে অনুযায়ী পরিবেশন করতে চান, কারণ এটাই সবচেয়ে ন্যায্য পদ্ধতি। সুতরাং, আপনি যদি জ্যাকের পরে আপনার খাবারের অর্ডার দেন, আপনি জ্যাকের পরে অবিলম্বে পরিবেশন করতে চাইবেন। এটি একটি সারির উদাহরণ।

এই টিউটোরিয়ালের উদ্দেশ্যে, আমরা সারি ইন্টারফেসের অগ্রাধিকার সারি বাস্তবায়নের উপর ফোকাস করতে যাচ্ছি, যা জাভাতে অগ্রাধিকার সারি তৈরি করতে ব্যবহৃত হয়।

অগ্রাধিকার সারি হল এক ধরণের সারি যার উপাদানগুলি তাদের অগ্রাধিকারের উপর ভিত্তি করে সাজানো হয়। এর মানে হল, 5 এবং 10 মান সহ একটি সারিতে, 10 সর্বদা সারির শুরুতে থাকবে, এমনকি এটি শেষ যোগ করা হলেও।

একটি অগ্রাধিকার সারি তৈরি করুন

জাভাতে একটি অগ্রাধিকার সারি তৈরি করতে, আপনাকে প্রথমে java.util.PriorityQueue আমদানি করতে হবে প্যাকেজ এই প্যাকেজটিতে PriorityQueue পদ্ধতি রয়েছে যা আমরা আমাদের সারি তৈরি করতে ব্যবহার করতে পারি। আমরা এই কোড ব্যবহার করে PriorityQueue প্যাকেজ আমদানি করতে পারি:

81% অংশগ্রহণকারী বলেছেন যে তারা বুটক্যাম্পে যোগ দেওয়ার পরে তাদের প্রযুক্তিগত কাজের সম্ভাবনা সম্পর্কে আরও আত্মবিশ্বাসী বোধ করেছেন। আজই একটি বুটক্যাম্পের সাথে মিলিত হন৷

গড় বুটক্যাম্প গ্র্যাড একটি বুটক্যাম্প শুরু করা থেকে শুরু করে তাদের প্রথম চাকরি খোঁজা পর্যন্ত ক্যারিয়ারের পরিবর্তনে ছয় মাসেরও কম সময় কাটিয়েছে।

 java.util.PriorityQueue;
আমদানি করুন

এখন আমরা PriorityQueue আমদানি করেছি, আমরা প্যাকেজ ব্যবহার করে একটি সারি তৈরি করতে পারি। এখানে একটি PriorityQueue তৈরি করতে ব্যবহৃত সিনট্যাক্স:

অগ্রাধিকার সারি queue_name =নতুন অগ্রাধিকার সারি<>();

আসুন এটি ভেঙে দেওয়া যাক:

  • অগ্রাধিকার সারি আমাদের প্রোগ্রামকে বলে যে আমরা একটি অগ্রাধিকার সারি তৈরি করতে চাই৷
  • ডেটা টাইপ আমাদের সারিটি যে ধরনের ডেটা সংরক্ষণ করবে।
  • কিউ_নাম ভেরিয়েবলের নাম যা আমাদের তৈরি করা সারিতে বরাদ্দ করা হবে।
  • নতুন অগ্রাধিকার সারি(); একটি অগ্রাধিকার সারি শুরু করে।

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

অগ্রাধিকার সারি অর্ডার =নতুন অগ্রাধিকার সারি<>();

এই উদাহরণে, আমরা orders নামক PriorityQueue-এর একটি উদাহরণ তৈরি করেছি যা পূর্ণসংখ্যার মান সংরক্ষণ করে। আমাদের সারিতে, FIFO ডেটা স্ট্রাকচার ব্যবহার করে উপাদানগুলি অ্যাক্সেস করা হবে এবং সরানো হবে৷

প্রধান সারিতে আইটেম যোগ করুন

জাভাতে, একটি সারিতে থাকা প্রতিটি উপাদানকে একটি item বলা হয় .

একটি সারিতে একটি আইটেম যোগ করতে, আমরা add() ব্যবহার করতে পারি পদ্ধতি এই পদ্ধতিটি একটি প্যারামিটার গ্রহণ করে:আইটেমের মান আপনি আপনার সারিতে যোগ করতে চান। সারি পূর্ণ হলে, add() পদ্ধতি একটি ব্যতিক্রম প্রদান করবে।

উপরন্তু, আমরা offer() ব্যবহার করতে পারি একটি সারিতে একটি আইটেম যোগ করার পদ্ধতি। add() এর মধ্যে পার্থক্য এবং offer() এটা হল offer() সারি পূর্ণ হলে মিথ্যা ফেরত দেয়, যেখানে add() একটি ব্যতিক্রম নিক্ষেপ করে৷

ধরুন আমরা আমাদের স্ট্যাকে সেই ক্রমে টেবিল #22 এবং #17 যোগ করতে চাই কারণ তারা সবেমাত্র তাদের মধ্যাহ্নভোজের অর্ডার দিয়েছে। আমরা এই কোডটি ব্যবহার করে তা করতে পারি:

 java.util.PriorityQueue;class AddCustomer { পাবলিক স্ট্যাটিক ভ্যাইড মেইন(স্ট্রিং[] args) { PriorityQueue orders =new PriorityQueue<>(); orders.add(22); System.println("অর্ডার:" + অর্ডার); orders.offer(17); System.out.println("আপডেট করা অর্ডার:" + অর্ডার); }}

আমাদের কোড ফিরে আসে:

অর্ডার:[22] আপডেট করা অর্ডার:[22, 17] 

আসুন আমাদের উদাহরণ ভাঙ্গা যাক। প্রথমে, আমরা PriorityQueue ক্লাস ইম্পোর্ট করেছি, যা আমরা আমাদের কোডে পরে ব্যবহার করি। তারপর আমরা AddCustomer নামে একটি ক্লাস ঘোষণা করি, যা এই উদাহরণের জন্য আমাদের কোড সংরক্ষণ করে। আমাদের ক্লাসের ভিতরে কোডটি কীভাবে কাজ করে তা এখানে:

  1. আমরা new PriorityQueue<>(); ব্যবহার করি orders নামে একটি অগ্রাধিকার সারি তৈরি করতে .
  2. আমরা add() ব্যবহার করি আমাদের স্ট্যাকে টেবিল #22 যোগ করার পদ্ধতি।
  3. আমরা Orders: শব্দটি প্রিন্ট আউট করি কনসোলে আমাদের স্ট্যাকের বিষয়বস্তু অনুসরণ করে।
  4. আমরা offer() ব্যবহার করি আমাদের স্ট্যাকে টেবিল #17 যোগ করার পদ্ধতি।
  5. আমরা Updated orders: শব্দটি মুদ্রণ করি কনসোলে আমাদের স্ট্যাকের সংশোধিত বিষয়বস্তু অনুসরণ করে।

22 আমাদের স্ট্যাকের মধ্যে প্রথম প্রদর্শিত হয়, এবং তাই আমরা একটি উপাদান অপসারণ যখন এটি প্রথম আউট হবে. অন্য কথায়, টেবিল # 22 আমাদের স্ট্যাকের শীর্ষে রয়েছে। টেবিল #17 আমাদের স্ট্যাকের দ্বিতীয় অবস্থানে সংরক্ষিত আছে। মনে রাখবেন, অগ্রাধিকার সারিগুলি FIFO ক্রম অনুসারে সাজানো হয়৷

আমাদের কোড আমাদের আসল অর্ডারগুলির সাথে একটি অ্যারে ফেরত দেয়, তারপরে আমাদের আপডেট করা অর্ডারগুলির সাথে একটি অ্যারে দেয়৷

প্রধান সারি থেকে আইটেম সরান

একটি অগ্রাধিকার সারি থেকে একটি আইটেম সরাতে দুটি পদ্ধতি ব্যবহার করা যেতে পারে:

  • remove() একটি সারি থেকে একটি উপাদানের একটি একক দৃষ্টান্ত সরিয়ে দেয়।
  • poll() একটি সারি থেকে প্রথম উপাদানটি সরিয়ে দেয় এবং সরানো আইটেমটি ফেরত দেয়।

ধরুন আমাদের সোস-শেফ অর্ডার #17 প্রক্রিয়া করেছেন এবং স্ট্যাক থেকে এটি সরাতে চান। সেই অর্ডারটি প্রসেস করার পর, আমাদের শেফ অর্ডার #22 প্রস্তুত করেছেন এবং এটি স্ট্যাক থেকে সরাতে চান৷

অর্ডার #17 আমাদের স্ট্যাকের অবস্থান 2 এ রয়েছে এবং অর্ডার #22 অবস্থান 1 এ রয়েছে। আমরা সেই ক্রমে এই আইটেমগুলি সরাতে চাই। আমরা অর্ডারগুলি সরাতে এই কোডটি ব্যবহার করতে পারি:

 import java.util.PriorityQueue;class RemoveOrders { public static void main(String[] args) { PriorityQueue orders =new PriorityQueue<>(); orders.add(22); orders.add(17); বুলিয়ান রিমুভ =orders.remove(2); System.out.println("অর্ডার #17 সরানো হয়েছে?" + সরানো হয়েছে); int second_removed =orders.poll(); System.out.println("Order #" + second_removed + " সারি থেকে সরানো হয়েছে।"); }}

আমাদের কোড ফিরে আসে:

অর্ডার #17 কি সরানো হয়েছে? trueOrder #22 সারি থেকে সরানো হয়েছে।

আসুন আমাদের কোড ভাঙ্গা যাক। প্রথমে, আমরা remove() ব্যবহার করেছি আমাদের স্ট্যাকের অবস্থান 2 এ অর্ডারটি সরানোর পদ্ধতি। এই সরানো আদেশ #17.

তারপরে আমাদের কোড একটি বার্তা প্রিন্ট আউট করে যে, Was order #17 removed? এর পরে remove() এর ফলাফল পদ্ধতি remove() আমাদের স্ট্যাক থেকে সফলভাবে #17 মুছে ফেলা হয়েছে, তাই পদ্ধতিটি সত্য হয়েছে।

এরপর, আমরা poll() ব্যবহার করেছি আমাদের স্ট্যাকের উপরের আইটেমটি সরানোর পদ্ধতি। এই ক্ষেত্রে, যে আদেশ #22 ছিল. poll() অপসারিত আদেশ #22 এবং সরানো আইটেম ফেরত. আইটেমটি সরানোর পরে, আমরা বার্তাটি প্রিন্ট করেছি Order #[order number removed] was removed from the queue. কনসোলে।

আইটেম পুনরুদ্ধার করুন

peek() একটি সারি আইটেম (সারির প্রথম আইটেম) মাথা পুনরুদ্ধার করতে পদ্ধতি ব্যবহার করা হয়। ধরুন আমরা আমাদের স্ট্যাকের পরবর্তী অর্ডারের মূল্য জানতে চেয়েছিলাম কারণ আমাদের সোস-শেফ একটি নতুন অর্ডার নিতে প্রস্তুত৷

আমরা এই কোডটি ব্যবহার করে পরবর্তী লাইনে থাকা গ্রাহকের টেবিল নম্বর পুনরুদ্ধার করতে পারি:

 import java.util.PriorityQueue;class RetrieveOrder { পাবলিক স্ট্যাটিক void main(String[] args) { PriorityQueue orders =new PriorityQueue<>(); orders.add(22); orders.add(17); int next_order =orders.peek(); System.out.println("পরবর্তী অর্ডারটি হল টেবিল #" + next_order + "।"); }}

আমাদের কোড ফিরে আসে:

প্রসেস করা পরবর্তী অর্ডারটি হল টেবিল #22।

আমাদের স্ট্যাকের প্রথম আইটেমটি হল 22, এবং তাই যখন আমরা peek() ব্যবহার করি পদ্ধতিতে, আমাদের প্রোগ্রামটি 22 মান প্রদান করে। আমাদের কোডের শেষ লাইনে, আমরা একটি বার্তা প্রিন্ট আউট করি যেখানে বলা হয়, The next order to be processed is table #[number of first order in stack]. , যেখানে স্ট্যাকের প্রথম অর্ডারের সংখ্যাটি peek() দ্বারা আবিষ্কৃত হয়েছে .

একটি অগ্রাধিকার সারির মাধ্যমে পুনরাবৃত্তি করুন

প্রায়শই, আপনি যখন সারি নিয়ে কাজ করছেন, আপনি অগ্রাধিকার সারির উপাদানগুলির উপর একটি পুনরাবৃত্তিকারী তৈরি করতে চাইবেন৷

এটি করার জন্য, আমরা iterator() ব্যবহার করতে পারি পদ্ধতি, যা java.util.Iterator প্যাকেজের অংশ। কিন্তু আমরা iterator() ব্যবহার করার আগে পদ্ধতি, আমাদের প্রথমে এই কোড ব্যবহার করে ইটারেটর প্যাকেজ আমদানি করতে হবে:

 java.util.Iterator আমদানি করুন;

ধরুন আমরা কনসোলে আমাদের রেস্তোরাঁর অর্ডারের সারিতে থাকা প্রতিটি আইটেমের একটি তালিকা প্রিন্ট করতে চাই। আমরা এই কোডটি ব্যবহার করে তা করতে পারি:

 import java.util.PriorityQueue; import java.util.Iterator; class PrintOrders { পাবলিক স্ট্যাটিক ভ্যাইড মেইন(স্ট্রিং[] args) { PriorityQueue orders =new PriorityQueue<>(); orders.add(22); orders.add(17);orders.add(14);orders.add(19); ইটারেটর iterate =orders.iterator(); while(iterate.hasNext()) { System.out.println(iterate.next()); } } }

আমাদের কোড ফিরে আসে:

22171419

আমাদের কোডে, আমরা প্রথমে আমাদের সারিতে চারটি মান যোগ করি। তারপর আমরা iterator() ব্যবহার করি একটি পুনরাবৃত্তিকারী তৈরি করার পদ্ধতি যা আমরা আমাদের অগ্রাধিকার সারির প্রতিটি আইটেমের মাধ্যমে যেতে ব্যবহার করতে পারি। তারপর আমরা একটি while তৈরি করি লুপ যা আমাদের পুনরাবৃত্তিকারীর প্রতিটি আইটেমের মধ্য দিয়ে চলে — orders-এর প্রতিটি আইটেমের জন্য সারি — এবং সারিতে পরবর্তী মান প্রিন্ট করে।

অতিরিক্ত অগ্রাধিকার সারি পদ্ধতি

আরও তিনটি পদ্ধতি রয়েছে যা প্রায়শই PriorityQueue ক্লাসের সাথে ব্যবহার করা হয়। এগুলি নিম্নরূপ:

পদ্ধতির নাম বিবরণ
size() সারির দৈর্ঘ্য ফেরত দেয়।
toArray() সারিটিকে একটি অ্যারেতে রূপান্তর করে৷
এ রয়েছে(elementName) একটি উপাদানের জন্য সারিতে অনুসন্ধান করে।

উপসংহার

PriorityQueue ক্লাসটি জাভাতে কিউ ইন্টারফেস বাস্তবায়নের জন্য ব্যবহার করা হয়। সারিগুলি FIFO ডেটা কাঠামো ব্যবহার করে, তাই প্রথম আইটেমটি প্রথমটি আউট৷

এই টিউটোরিয়ালটি জাভাতে সারি এবং অগ্রাধিকার সারিগুলির মৌলিক বিষয়গুলির মধ্য দিয়ে হেঁটেছে। আমরা কীভাবে একটি সারি তৈরি করতে হয় এবং একটি সারি থেকে আইটেমগুলি পুনরুদ্ধার করতে এবং ম্যানিপুলেট করতে আপনি যে প্রধান পদ্ধতিগুলি ব্যবহার করতে পারেন তা নিয়েও আলোচনা করেছি৷

আপনার কাছে এখন জাভা অগ্রাধিকার কিউ ক্লাস একজন পেশাদারের মতো ব্যবহার শুরু করার জন্য প্রয়োজনীয় সরঞ্জাম রয়েছে!


  1. কিভাবে আমরা জাভাতে সারি ব্যবহার করে একটি স্ট্যাক প্রয়োগ করতে পারি?

  2. জাভাতে কি সুইং থ্রেড-নিরাপদ?

  3. জাভাতে নেস্টেড ইন্টারফেস

  4. জাভাতে ইন্টারফেস