জাভা সংগ্রহের এপিআইগুলিতে কেন একটি শেষ পদ্ধতি নেই? [বন্ধ]


19

এটি অর্ডার করা সংগ্রহের জন্য যেমন java.util.List। ভাষা ডিজাইনারগণ একটি শেষ পদ্ধতি অন্তর্ভুক্ত করেননি কেন? কেবলমাত্র কারণগুলি আমি ভাবতে পারি:

  • অস্পষ্টতা যখন সংগ্রহটি খালি থাকে (নাল ফেরান বা বাদ দিন)
  • এপিআই ব্লাট

অন্য কোন কারণে?


9
আমাকে লিখতে হয়েছিল এমন নিখুঁত সংখ্যার জন্য +1 collection.get(collection.size() - 1)
jprete

1
আপনার নিজস্ব ইউটিলিটি ক্লাসটি কেন এই পদ্ধতিতে নেই এবং সংগ্রহের সাথে আপনি ব্যবহার করতে পারেন এমন কোনও অন্য পদ্ধতি কেন লিখবেন না?
মাহমুদ হোসাম

7
কোনও প্রথম () পদ্ধতি নেই, তবে কেন একটি শেষ () পদ্ধতি থাকা উচিত?
পিটার টেলর

6
@ পিটার উরগই getLast () get get (-1) এর মতো হ্যাক দিয়ে এটি বাস্তবায়ন করছে না এর চেয়ে খারাপ বিষয়টিই।
আল্প

2
@ অ্যালব আমি অনুমান করি যে "হ্যাক" দর্শকের চোখে পড়েছে: সময়ের এই সময়ে আমি পাইথনের -1 সিনট্যাক্সটির প্রশংসা করি। অবশ্যই, আপনি যদি ভবিষ্যতে বা অতীতে আমাকে আবার জিজ্ঞাসা করেন তবে আমি ঠিক আপনার মতোই অনুভব করতে পারি।
থ্রি-কাপ

উত্তর:


13

এপিআই ফোটা সম্ভবত উত্তর। আমার অভিজ্ঞতা থেকে কেবলমাত্র যখন আমি এই কার্যকারিতাটি প্রয়োজন তখন একটি ক্যু বা স্ট্যাক ছিল উপযুক্ত পদ্ধতিযুক্ত কাজের জন্য সঠিক ডেটা কাঠামো।


অনুমান করুন আপনি আংশিকভাবে সঠিক, তবে জাভা যদি get(-1)কোনও তালিকা শেষে থেকে পুনরুদ্ধার করতে সমর্থন করে তবে এটি এপিআই ব্লাট যুক্ত না করে ওপি যা চেয়েছিল তা করবে। এর মতো আমার উত্তরটি অব্যক্ত ডাউনভোটগুলি আঁকা।
user949300

1
আমি মনে করি এর চেয়ে বড় উত্তর হ'ল জাভাটির প্রাথমিক ব্যর্থতা (। নেট মধ্যে পুনরাবৃত্তি, এবং এখনও পরবর্তী ক্ষেত্রে চলমান) ডিফল্ট ইন্টারফেস পদ্ধতি সমর্থন করার অর্থ ইন্টারফেস থাকার ফলে এমন একটি সদস্য অন্তর্ভুক্ত থাকে যা ৯৯% বাস্তবায়ন একই পদ্ধতিতে অতিরিক্ত কাজ চাপিয়ে দেবে উপর সব কিছু তাদের ভিন্নভাবে বাস্তবায়ন করবে সুবিধার জন্য বাস্তবায়নের।
সুপারক্যাট

16

একটি last()পদ্ধতি ঠিক যেমন সহজ list.get(list.size()-1), তেমন কোনও first()পদ্ধতি বা fifth()পদ্ধতি নেই। এটি সংশ্লেষ করা এতটা কঠিন নয় এবং এটি একটি বিশেষীকরণ। আপনি reverse()তালিকাটি করতে পারেন এবং list.get(0)যা lastআইটেমটি দেবে। যে কাজগুলি করা সহজ, সাধারণত তাদের নিজস্ব বিশেষ পদ্ধতি পান না।

import java.util.ArrayList;
import java.util.List;

public class Main
{
    public static void main(String[] args)
    {
        final List<String> l = new ArrayList<String>();

        l.add("A");
        l.add("B");
        l.add("Z");

        System.out.println("l.get(0) = " + l.get(0));
        System.out.println("l.get(l.size()-1) = " + l.get(l.size() - 1));
    }
}

নিম্নলিখিত আউটপুট ফলাফল

l.get(0) = A
l.get(l.size()-1) = Z

এটি ধারণা করাও অনুমানযোগ্য যে Listইন্টারফেসটি প্রয়োগ করে এমন প্রতিটি last()কিছুরই ধারণাগুলি আসলে আছে ।


1
এটা যদিও উভয় ক্ষেত্রেই পরিস্কার হবে
Anto

নোট করুন যে সংগ্রহটি এখনও পুরোপুরি জনবহুল না হলে আকার () পদ্ধতি উত্তর দিতে সক্ষম হতে পারে না।

1
.size()বর্তমান আকারটি ফিরে .size()-1আসবে এখনও নির্বিশেষে সর্বশেষ উপাদানটি হবে, এটি কীভাবে জানবে যে এটি সম্পূর্ণ জনবহুল ছিল কিনা?

1
স্পেসিফিকেশন অনুযায়ী, একটি তালিকা Integer.MAX_VALUE উপাদানের চেয়ে বেশি থাকতে পারে, যা কেস আকার () ফেরৎ Integer.MAX_VALUE, তাই .size()-1বাস্তবায়ন নিখুঁত উপায় নয় last()(যদিও এই ধরনের একটি বৃহৎ তালিকা খুব অসম্ভাব্য এবং আমি ভাবছি এই ধরনের একটি তালিকা বাস্তবায়ন করবে toArray()...)
ব্যবহারকারী 281377

1
সি # এর একটি .প্রথম এবং .তম পদ্ধতি আছে। কেবলমাত্র সর্বশেষ আইটেমটি পেতে একটি তালিকা বিপরীত করা ঠিক কার্যকর নয়।
ক্যাররা

5

java.util.LinkedListসংজ্ঞায়িত getLast()এবং getFirst()পদ্ধতি। দুর্ভাগ্যক্রমে এই পদ্ধতিগুলির এর একটি ইন্টারফেসে সংজ্ঞায়িত করা হয়নি, সুতরাং আপনাকে লিংকডলিস্ট টাইপ ব্যবহার করতে হবে। আপনি যদি কেবলমাত্র সর্বশেষ উপাদানটিতে আগ্রহী হন তবে আপনি java.util.Queueইন্টারফেসের peek()পদ্ধতিটি ব্যবহার করতে পারেন । লিঙ্কডলিস্ট সারি প্রয়োগ করে।


0

মূলত আপনাকে হয় size()একটি forলুপের জন্য জিজ্ঞাসা করতে হবে বা এর পুনরুক্তিকারীকে জিজ্ঞাসা করে এটি পুনরুক্ত করতে হবে এবং এটি কিছুক্ষণের মধ্যে বা ডু-লুপ ব্যবহার করতে হবে। আপনার উদ্দেশ্যে উপযুক্ত একটি ব্যবহার করুন।

আরও বেশি এন্ট্রি থাকলে পুনরাবৃত্তি একটি নির্দিষ্ট বিন্দুতে জানে এবং যদি সেখানে থাকে তবে আপনাকে পরবর্তীটি পেতে দেয়। তারপরে আপনি "আরও এন্ট্রি" পর্যন্ত পুনরুক্ত করবেন? ব্যর্থ।

Http://download.oracle.com/javase/tutorial/collections/interfaces/collection.html এ "ট্র্যাভারসিং সংগ্রহগুলি" বিভাগটি দেখুন


এটি প্রশ্নের উত্তর নয়। তালিকার শেষ উপাদানটি খুঁজে পেতে পুনরুক্তি ব্যবহার করাও চূড়ান্তভাবে অক্ষম।
ফিশিনিয়ার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.