জাভাতে আমি কীভাবে কোনও কিউ অবজেক্ট ইনস্ট্যান্ট করব?


142

আমি যখন চেষ্টা করি:

Queue<Integer> q = new Queue<Integer>();

সংকলক আমাকে একটি ত্রুটি দিচ্ছে। কোন সাহায্য?

এছাড়াও, আমি যদি একটি সারি শুরু করতে চাই তবে কি আমার কিউয়ের পদ্ধতিগুলি প্রয়োগ করতে হবে?


2
থ্রেডটি নিরাপদে রাখতে আপনার কি কিউ দরকার?
পিটার লরে

উত্তর:


151

Queueএকটি ইন্টারফেস, যার অর্থ আপনি Queueসরাসরি নির্মাণ করতে পারবেন না ।

সবচেয়ে ভাল বিকল্প একটি বর্গ ইতিমধ্যে প্রয়োগ বন্ধ গঠন করা হয় Queueইন্টারফেস, নিম্নলিখিত বর্ণনার মত: AbstractQueue, ArrayBlockingQueue, ArrayDeque, ConcurrentLinkedQueue, DelayQueue, LinkedBlockingQueue, LinkedList, PriorityBlockingQueue, PriorityQueue, অথবা SynchronousQueue

একটি বিকল্প হ'ল আপনার নিজস্ব শ্রেণি লিখুন যা প্রয়োজনীয় ক্যু ইন্টারফেস প্রয়োগ করে। এটি বিরল ক্ষেত্রে ব্যতীত প্রয়োজন হয় না যেখানে আপনি আপনার প্রোগ্রামের বাকি অংশটি সরবরাহ করার সময় বিশেষ কিছু করতে চান Queue

public class MyQueue<T extends Tree> implements Queue<T> {
   public T element() {
     ... your code to return an element goes here ...
   }

   public boolean offer(T element) {
     ... your code to accept a submission offer goes here ...
   }

   ... etc ...
}

এর চেয়ে কম ব্যবহৃত বিকল্প হ'ল একটি বেনাম শ্রেণি তৈরি করে যা প্রয়োগ করে Queue। আপনি সম্ভবত এটি করতে চান না, তবে এটি সমস্ত ঘাঁটি কাভার করার জন্য একটি বিকল্প হিসাবে তালিকাভুক্ত।

new Queue<Tree>() {
   public Tree element() {
     ...
   };

   public boolean offer(Tree element) {
     ...
   };
   ...
};

21
ওহে প্রিয় ... আমি আশঙ্কা করি যে এটি পড়ার সাথে সাথে কোনও বেনাম ব্যবহার করবে Queue... তবে যাইহোক +1 করা হবে।
টম

1
আসলে, জোনস আরও স্পষ্ট। আপনি যদি এটির সাথে সামঞ্জস্যের উল্লেখ করার জন্য আপডেট করেন এবং বেনাম শ্রেণীর কোডটি থেকে মুক্তি পান তবে আমি এটি +1 করব ... আমি মনে করি যে এটি কারওর জন্য উত্তরটি আরও বিভ্রান্তিকর করে তোলে যা কী করতে চায় কারণ তারা প্রায় নিশ্চিতভাবেই চায় না কর এটা. (এমনকি যদি তারা তাদের নিজস্ব শ্রেণি চায়, তবে এটি বেনামে রাখার দরকার নেই)
টম

1
@ টম বেনাম শ্রেণীর তথ্যটি বের করে আনেনি কারণ এটি সম্ভব তা জানা ভাল, তবে আমি "নিজের প্রয়োগ লিখুন" এর আগে রেখেছি যা এটি প্রথম তালিকাভুক্ত (আরও সাধারণ) বিকল্পগুলি থেকে আরও দূরে রয়েছে।
এডউইন বাক

1
কেন উল্লেখ নেইArrayDeque
JW.ZG

আপনার উল্লিখিত কোনও শ্রেণিতে আমি এনকুই () পদ্ধতিটি খুঁজে পাচ্ছি না, আমি কেবল যুক্ত () পদ্ধতিটি খুঁজে পেতে সক্ষম, যদি আমি ভুল হয়ে থাকি তবে দয়া করে আমাকে সংশোধন করুন।
শ্রীকান্ত করুণাঘাট

152

Queueএকটি ইন্টারফেস। আপনি কোনও বেনামি অভ্যন্তরীণ শ্রেণি বাদে সরাসরি কোনও ইন্টারফেস ইনস্ট্যান্ট করতে পারবেন না। সাধারণত আপনি সংগ্রহের জন্য এটি করতে চান তা নয় । পরিবর্তে, একটি বিদ্যমান বাস্তবায়ন চয়ন করুন। উদাহরণ স্বরূপ:

Queue<Integer> q = new LinkedList<Integer>();

অথবা

Queue<Integer> q = new ArrayDeque<Integer>();

আপনার আগ্রহী পারফরম্যান্স এবং সম্মতিযুক্ত বৈশিষ্ট্যগুলি দ্বারা সাধারণত আপনি সংগ্রহ বাস্তবায়ন বেছে নেন।


9
অ্যারেডেক থেকে : "এই শ্রেণিটি স্ট্যাক হিসাবে ব্যবহৃত হওয়ার পরে স্ট্যাকের চেয়ে দ্রুত এবং কাতার হিসাবে ব্যবহৃত হলে লিংকডলিস্টের চেয়ে দ্রুততর হতে পারে"। এটি সিপিইউ-ক্যাশে-বান্ধব ডেটা লোকাল এবং কম ঘন ঘন বরাদ্দের কারণে।
ভাদজিম

42
Queue<String> qe=new LinkedList<String>();

qe.add("b");
qe.add("a");
qe.add("c");

যেহেতু Queueএকটি ইন্টারফেস, তাই আপনি উদাহরণ হিসাবে তৈরি করতে পারবেন না


1
java.util.Queueএকটি ইন্টারফেস। আপনি ইন্টারফেস ইনস্ট্যান্ট করতে পারবেন না। আপনার ইন্টারফেসটি প্রয়োগ করে এমন কোনও শ্রেণীর উদাহরণ তৈরি করতে হবে। এক্ষেত্রে একটি লিঙ্কডলিস্ট এমন একটি বর্গ।
মিহাই তোদার

@ টড হ্যাঁ চলছিল .. :)
জিগার জোশী

ধন্যবাদ @ জিগারজোশি !! স্ট্যাক দিয়ে একই জিনিস করার কোন উপায় আছে? আমি কিছুই খুঁজে পেলাম না।
জেহরা সুবাş

@ জেহStack<String> stack = new Stack<>(); stack.push("a"); stack.push("b"); System.out.println(stack.pop()); import java.util.Stack;
জিগার জোশী

15

সারি একটি ইন্টারফেস; আপনি স্পষ্টভাবে একটি সারি নির্মাণ করতে পারবেন না। আপনাকে এর একটি প্রয়োগকারী ক্লাস ইনস্ট্যান্ট করতে হবে। কিছুটা এইরকম:

Queue linkedList = new LinkedList();

এই বিষয়ে জাভা টিউটোরিয়ালের লিঙ্ক এখানে।


এটি আর কাজ করছে না ..! যদিও এই ঘোষণাপত্রটি কাজ করছে -> কিউ <চ্যারাকটার> কুই = নতুন অ্যারেডেক <চ্যারাকটার> ();
মোঃ ফয়সাল

@ এমডিফায়াল আমার জন্য ডাব্লু / জাভা সংস্করণ "1.7.0_71"
zmf

12

এখানে চিত্র বর্ণনা লিখুন

কিউ ইন্টারফেসটি অতিরিক্ত সন্নিবেশ, নিষ্কাশন এবং পরিদর্শন ক্রিয়াকলাপগুলির সাথে java.util. সংগ্রহ সংগ্রহ করে:

+offer(element: E):বুলিয়ান // একটি উপাদান tingোকানো

+poll(): E // উপাদানটি পুনরুদ্ধার করে এবং সারিটি খালি থাকলে NULL প্রদান করে

+remove(): E// উপাদানটি পুনরুদ্ধার করে এবং সরিয়ে দেয় এবং সারিটি খালি থাকলে একটি ব্যতিক্রম ছুঁড়ে দেয়

+peek(): E// পুনরুদ্ধার করে, কিন্তু সরিয়ে দেয় না, এই সারিটির মাথাটি, এই সারিটি খালি থাকলে নাল ফিরে।

+element(): E// পুনরুদ্ধার করে, কিন্তু সরিয়ে দেয় না, এই সারিটির শিরোনামটি, যদি তে সারিটি খালি থাকে তবে একটি ব্যতিক্রম ছুঁড়ে ফেলে।

সারি প্রয়োগের জন্য উদাহরণ কোড:

java.util.Queue<String> queue = new LinkedList<>();
queue.offer("Hello");
queue.offer("StackOverFlow");
queue.offer("User");

System.out.println(queue.peek());

while (queue.size() > 0){
    System.out.println(queue.remove() + " ");
}
//Since Queue is empty now so this will return NULL
System.out.println(queue.peek());

কোড আউটপুট:

Hello
Hello 
StackOverFlow 
User 
null

7

ক্যু জাভাতে একটি ইন্টারফেস, আপনি এটি করতে পারবেন না।

পরিবর্তে আপনার কাছে দুটি বিকল্প রয়েছে:

বিকল্প 1:

Queue<Integer> Q = new LinkedList<>();

OPTION2:

Queue<Integer> Q = new ArrayDeque<>();

অপশন 2 ব্যবহার করার পরামর্শ দিচ্ছি কারণ এটি অন্যের চেয়ে কিছুটা দ্রুত


5

জাভাতে সারি একটি ইন্টারফেস হিসাবে সংজ্ঞায়িত করা হয় এবং ব্যবহারের জন্য অনেকগুলি বাস্তবায়ন জেডিকে মুক্তির অংশ হিসাবে উপস্থিত থাকে। এখানে কিছু রয়েছে: লিংকডলিস্ট , অগ্রাধিকার ক্যু, অ্যারেব্লকিংকুই, কনক্র্যান্টলিঙ্কড কিউ, লিঙ্কড ট্রান্সফার কিউ, সিঙ্ক্রোনাস ক্যু ইত্যাদি

সুতরাং আপনি এই শ্রেণীর যে কোনও তৈরি করতে এবং এটিকে ক্যু রেফারেন্স হিসাবে ধরে রাখতে পারেন। উদাহরণ স্বরূপ

import java.util.LinkedList;
import java.util.Queue;

public class QueueExample {

 public static void main (String[] args) {
  Queue que = new LinkedList();
  que.add("first");
  que.offer("second");
  que.offer("third");
  System.out.println("Queue Print:: " + que);
  
  String head = que.element();
  System.out.println("Head element:: " + head);
  
  String element1 = que.poll();
  System.out.println("Removed Element:: " + element1);
  
  System.out.println("Queue Print after poll:: " + que);
  String element2 = que.remove();
  System.out.println("Removed Element:: " + element2);
  
  System.out.println("Queue Print after remove:: " + que);  
 }
}

আপনি আপনার নিজস্ব কাস্টম ক্যু প্রয়োগ করে কিউ ইন্টারফেস প্রয়োগ করতে পারেন।


4

Queueজাভা একটি ইন্টারফেস, আপনি এটি করতে পারে না। চেষ্টা করে দেখুন:

Queue<Integer> Q = new LinkedList<Integer>();
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.