জাভাতে একটি কাতারে অ্যাড এবং অফার পদ্ধতির মধ্যে পার্থক্য কী?


109

PriorityQueueউদাহরণস্বরূপ http://java.sun.com/j2se/1.5.0/docs/api/java/util/PriorityQueue.html#offer(E) নিন

পদ্ধতি এবং পদ্ধতিগুলি পৃথক Queueযেখানে কেউ আমাকে একটি উদাহরণ দিতে পারেন ?addoffer

Collectionডকের মতে , addপদ্ধতিটি প্রায়শই Collectionনকলগুলি যুক্ত করার পরিবর্তে কোনও উপাদান উপস্থিত রয়েছে তা নিশ্চিত করার চেষ্টা করবে । সুতরাং আমার প্রশ্ন, পদ্ধতি addএবং offerপদ্ধতির মধ্যে পার্থক্য কি ?

offerপদ্ধতিটি নির্বিশেষে নকল যুক্ত করবে এটি কি ? (আমি সন্দেহ করি যে কারণ এটি যদি একটি Collectionস্বতন্ত্র উপাদান থাকা উচিত এটি এড়ানো হবে)।

সম্পাদনা করুন: একটি এবং পদ্ধতি একই পদ্ধতি দ্বারা (নীচের আমার উত্তর দেখুন)। কেউ কি আমাকে এমন ক্লাসের উদাহরণ দিতে পারেন যেখানে পদ্ধতি এবং পদ্ধতিগুলি আলাদা?PriorityQueueaddofferaddoffer

উত্তর:


148

আমি অনুমান করি পার্থক্য চুক্তির মধ্যে রয়েছে, যখন উপাদান সংগ্রহের ক্ষেত্রে উপাদান যুক্ত করা যায় না তখন addপদ্ধতিটি একটি ব্যতিক্রম ছোঁড়ে এবং offerনা।

প্রেরণ : http://java.sun.com/j2se/1.5.0/docs/api/java/util/ Collections.html#add%28E%29

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

থেকে: http://java.sun.com/j2se/1.5.0/docs/api/java/util/Queue.html#offer%28E%29

যদি সম্ভব হয় তবে এই সারিতে নির্দিষ্ট উপাদান সন্নিবেশ করান। সন্নিবেশ নিষেধাজ্ঞাগুলি (উদাহরণস্বরূপ ক্ষমতা সীমা) আরোপ করতে পারে এমন সারিগুলি ব্যবহার করার সময়, পদ্ধতি অফারটি সাধারণত সংগ্রহের পক্ষে পছন্দ হয় ad


4
offerবনাম কখন ব্যবহার করবেন সে সম্পর্কে স্নিপেটটি অনুসন্ধান করার জন্য +1 add
ফিনব্বর

28

বাস্তবায়নের জন্য কোনও পার্থক্য নেই PriorityQueue.add:

public boolean add(E e) {
    return offer(e);
}

কারণ AbstractQueueআসলে একটি পার্থক্য আছে:

public boolean add(E e) {
    if (offer(e))
        return true;
    else
        throw new IllegalStateException("Queue full");
}

আমি জানি, আমি এই উত্তরটি কয়েক মিনিট আগে সবেমাত্র পোস্ট করেছি। আপনি কি এমন কোনও ক্লাস সম্পর্কে জানেন যেখানে addপদ্ধতিটি পদ্ধতির চেয়ে আলাদা offer?
ফিনব্বর

13

মধ্যে পার্থক্য offerএবং addjavadocs থেকে এই দুটি উদ্ধৃতাংশ দ্বারা ব্যাখ্যা করা হয়:

Collectionইন্টারফেস থেকে :

যদি কোনও সংগ্রহটিতে addইতিমধ্যে উপাদানটি ব্যতীত অন্য কোনও কারণে কোনও নির্দিষ্ট উপাদানকে অস্বীকার করা হয় তবে অবশ্যই এটির ব্যতিক্রম (মিথ্যা প্রত্যাবর্তনের পরিবর্তে) ছুঁড়ে ফেলা উচিত। এটি আক্রমণকারীটিকে সংরক্ষণ করে যে একটি সংগ্রহে সর্বদা এই কল ফেরত দেওয়ার পরে নির্দিষ্ট উপাদান থাকে।

Queueইন্টারফেস থেকে

সন্নিবেশ নিষেধাজ্ঞাগুলি (উদাহরণস্বরূপ ক্ষমতা সীমা) আরোপ করতে পারে এমন সারিগুলি ব্যবহার করার সময়, পদ্ধতিটি offerসাধারণত পদ্ধতির চেয়ে পছন্দনীয় Collection.add(E), যা কেবলমাত্র ব্যতিক্রম ছুঁড়ে দিয়ে কোনও উপাদান সন্নিবেশ করতে ব্যর্থ হতে পারে।

PriorityQueueএমন একটি Queueবাস্তবায়ন যা কোনও সন্নিবেশ নিষেধাজ্ঞাকে আরোপ করে না। সুতরাং addএবং offerপদ্ধতিগুলির একই শব্দার্থক শব্দ রয়েছে।

বিপরীতে, ArrayBlockingQueueএটি এমন একটি বাস্তবায়ন যা সারিটি কীভাবে ইনস্ট্যান্ট করা হয়েছিল তার উপর নির্ভর করে offerএবং addআলাদাভাবে আচরণ করে।


8

পার্থক্যটি নিম্নলিখিত:

  • অফার পদ্ধতি - একটি সারিতে একটি উপাদান যুক্ত করার চেষ্টা করে এবং উপাদান যুক্ত না করা হলে মিথ্যা প্রত্যাবর্তন করে (যেমন একটি সারি পূর্ণ হওয়ার ক্ষেত্রে যেমন হয়), অথবা উপাদানটি যুক্ত করা থাকলে সত্য , এবং কোনও নির্দিষ্ট ব্যতিক্রম ছুঁড়ে না ।

  • যোগ পদ্ধতি - একটি সারিতে একটি উপাদান যোগ করার জন্য চেষ্টা করে, ফেরৎ সত্য যদি উপাদান যোগ করা হয়েছে, অথবা একটি IllegalStateException ছোঁড়ার কোন স্থান উপলব্ধ।


1
উপাদানটি ইতিমধ্যে কুই <স্ট্রিং> কি = নতুন অগ্রাধিকারকুই <> () উপলব্ধ থাকলে যোগ করার পদ্ধতিটি কখনই মিথ্যা প্রত্যাবর্তন করে না; স্ট্রিং বি = "জাভা"; বুলিয়ান is1 = q.add (খ); বুলিয়ান is2 = q.add ("জাভা"); বুলিয়ান is3 = q.add (খ); বুলিয়ান is4 = q.offer ("java"); বুলিয়ান is5 = q.offer (খ); বুলিয়ান is6 = q.offer (খ); System.out.println ( "QQ ::" + Q);
রাজ

ধন্যবাদ, রাজ! আমি আমার প্রতিক্রিয়া উপরে আপডেট করেছি। ওরাকল ডকুমেন্টেশন বলে: "অফার পদ্ধতিটি সম্ভব হলে একটি উপাদান সন্নিবেশ করায়, অন্যথায় মিথ্যা ফিরিয়ে দেয় This এটি কালেকশন.এডিডি পদ্ধতি থেকে পৃথক, যা কেবল একটি চেক না করা ব্যতিক্রম ছুঁড়ে দিয়ে কোনও উপাদান যুক্ত করতে ব্যর্থ হতে পারে failure ব্যর্থ হলে অফার পদ্ধতিটি ডিজাইন করা হয়েছে ব্যতিক্রমী ঘটনার পরিবর্তে একটি স্বাভাবিক, উদাহরণস্বরূপ, স্থির-ক্ষমতা (বা "চৌম্বক") সারিতে ""
ম্যাকসেম ওভসিয়ানিকভ

7

নিম্নলিখিত হিসাবে jdk 7 এর উত্স কোড থেকে:

public boolean add(E e) {
    if (offer(e))
        return true;
    else
        throw new IllegalStateException("Queue full");
}

আমরা সহজেই জানতে পারি যে সফলভাবে কাতারে কোনও নতুন উপাদান যুক্ত করলে অ্যাড ফাংশনটি সত্য হয়ে উঠবে, তবে ব্যর্থ হলে ব্যতিক্রম ছুঁড়ে ফেলবে।


5

Queueইন্টারফেস নির্দিষ্ট করে add()একটি নিক্ষেপ করা হবে IllegalStateExceptionযদি কোনো স্থান বর্তমানে উপলব্ধ (এবং অন্যথায় আসতে true) যখন offer()ফিরে আসবে falseযদি উপাদান ধারণক্ষমতা সীমাবদ্ধতার কারণে ঢোকানো যাবে না।

এগুলির ক্ষেত্রে এটি একই হওয়ার কারণ PriorityQueueহ'ল এই সারিটি সীমাহীন বলে নির্দিষ্ট করা হয়েছে, অর্থাত্ কোনও ক্ষমতা বিধিনিষেধ নেই। কোনও ক্ষমতা সীমাবদ্ধতার ক্ষেত্রে, একই আচরণের চুক্তি add()এবং offer()প্রদর্শন করে and


2

আমি অফার পদ্ধতির জন্য জাভা চুক্তির উদাহরণ কোড লিখব এবং তারা কীভাবে পৃথক হবে তা দেখানোর পদ্ধতি যুক্ত করব।

BlockingQueue<String> queue = new ArrayBlockingQueue<>(2);
        queue.add("TestQuue1");     
        queue.add("TestQuue2"); 
        queue.add("TestQuue3");  // will throw "java.lang.IllegalStateException: Queue full

BlockingQueue<String> queue = new ArrayBlockingQueue<>(2);
        queue.offer("TestQuue1");       
        queue.offer("TestQuue2");   
        queue.offer("TestQuue3"); // will not throw any exception

0

সূত্র: http://docs.oracle.com/javase/6/docs/api/java/util/Queue.html

অফার পদ্ধতিটি সম্ভব হলে কোনও উপাদান সন্নিবেশ করায়, অন্যথায় মিথ্যা ফিরিয়ে দেওয়া। এটি কালেকশন.এডিডি পদ্ধতি থেকে পৃথক, যা কেবল একটি চেক না করা ব্যতিক্রম ছুঁড়ে দিয়ে কোনও উপাদান যুক্ত করতে ব্যর্থ হতে পারে। অফার পদ্ধতিটি ব্যতিক্রমী ঘটনার পরিবর্তে ব্যর্থতা স্বাভাবিক হওয়ার ক্ষেত্রে ব্যবহারের জন্য ডিজাইন করা হয়, উদাহরণস্বরূপ, স্থির-ক্ষমতা (বা "সীমাবদ্ধ") সারিগুলিতে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.