জাভার কালেকশন.সেসলটনলিস্টের ব্যবহার ()?


164

Collections.singletonList()জাভা ব্যবহার কি ? আমি বুঝতে পারি যে এটি একটি উপাদান সহ একটি তালিকা দেয়। আমি কেন এটির জন্য আলাদা পদ্ধতি রাখতে চাই? অপরিবর্তনীয়তা এখানে কীভাবে ভূমিকা পালন করে?

এই পদ্ধতির জন্য কেবল কোনও সুবিধাজনক পদ্ধতি না হয়ে কি কোনও বিশেষ কার্যকর ব্যবহারের কেস রয়েছে?


6
এখানে কিভাবে এটা উপযোগী হতে পারে উদাহরণ নেই - stackoverflow.com/a/1239631/360811
shabunc


1
@ এসচুবার্থ, দয়া করে প্রশ্নের তারিখগুলি তুলনা করুন। ওপি সচেতন ছিল না / সে কোনও ভবিষ্যতের প্রশ্নের নকল করতে পারে
কুমারঅঙ্কিত

সত্য, @ কুমারআঙ্কিত, তবে নকলের লিঙ্কগুলি বিকল্প / সম্ভাব্য আরও ভাল উত্তরগুলির সন্ধানকারীদের জন্য এখনও কার্যকর। প্রকৃতপক্ষে আমি বিশ্বাস করি যে সদৃশ হিসাবে লিঙ্কিং একটি দ্বিপাক্ষিক বিষয় হিসাবে বিবেচনা করা উচিত, এবং আরও ভাল প্রশ্ন / উত্তর রাখা উচিত, এগুলি পুরানো বা নতুন যাই হোক না কেন।
স্কুবার্থ

@ এসচুবার্থ, ভাল বিষয়, তবে এটি এখানে এই প্রশ্নের মতোই শ্রেণিবদ্ধ করা উচিত।
কুমারআঙ্কিত

উত্তর:


159

Javadoc এই বলে:

"কেবলমাত্র নির্দিষ্ট অবজেক্টযুক্ত একটি অপরিবর্তনীয় তালিকা ফিরিয়ে দেয় returned প্রত্যাবর্তিত তালিকাটি ক্রমিকযোগ্য।"

আপনি জিজ্ঞাসা:

আমি কেন এটির জন্য আলাদা পদ্ধতি রাখতে চাই?

প্রাথমিকভাবে একটি সুবিধার্থ হিসাবে ... আপনার কাছে বিবৃতিগুলির ক্রম লিখতে বাঁচাতে:

  • একটি খালি তালিকা অবজেক্ট তৈরি করুন
  • এটিতে একটি উপাদান যুক্ত করুন, এবং
  • একটি অপরিবর্তনীয় মোড়ক দিয়ে এটি মোড়ানো।

এটি কিছুটা দ্রুত এবং / অথবা কিছুটা মেমরি সঞ্চয়ও করতে পারে তবে এই ছোট সঞ্চয়টি তাত্পর্যপূর্ণ হওয়ার সম্ভাবনা কম। (এমন একটি অ্যাপ্লিকেশন যা বিপুল সংখ্যক সিঙ্গলটন তালিকাগুলি তৈরি করে তা কমপক্ষে বলা অস্বাভাবিক))

অপরিবর্তনীয়তা এখানে কীভাবে ভূমিকা পালন করে?

এটি পদ্ধতির স্পেসিফিকেশনের অংশ; উপরে দেখুন.

এই পদ্ধতির জন্য কি কেবল কোনও সুবিধামত পদ্ধতি হওয়ার পরিবর্তে কোনও বিশেষ কার্যকর ব্যবহারের কেস রয়েছে?

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


26

সিঙ্গলটন পদ্ধতি সম্পর্কে এখানে একটি ভিউ :

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


আপনি কি আমাকে উপরের মন্তব্যের এই অংশটি বুঝতে সাহায্য করতে পারেন? "অবশ্যই, পাসড-ইন মানটির কোড প্রক্রিয়াকরণে সংগ্রহে যোগ করার প্রয়োজন নেই তখন এটি সর্বোত্তম কাজ করে।" পেলাম না।
বিলবো ব্যাগিনস

2
আমি মনে করি তিনি উত্তীর্ণ তালিকায় পাস-ইন তালিকাকে সংশোধন করতে না পারা বলে উল্লেখ করেছেন।
ড্যানিয়েল হিগুরাস

2
@ বিলবোবাগিনস - এই বিবৃতিটি বিদ্রূপজনক ছিল। :-) "এটি সর্বোত্তম কাজ করে যখন ..." আরও সঠিকভাবে লেখা হয় "এটি কেবল তখনই কার্যকর হয় যদি ..."।
স্টিফেন সি

18

জাভাদোক থেকে

@param  the sole object to be stored in the returned list.
@return an immutable list containing only the specified object.

উদাহরণ

import java.util.*;

public class HelloWorld {
    public static void main(String args[]) {
        // create an array of string objs
        String initList[] = { "One", "Two", "Four", "One",};

        // create one list
        List list = new ArrayList(Arrays.asList(initList));

        System.out.println("List value before: "+list);

        // create singleton list
        list = Collections.singletonList("OnlyOneElement");
        list.add("five"); //throws UnsupportedOperationException
        System.out.println("List value after: "+list);
    }
}

কোডটি যখন কেবল পঠনযোগ্য তালিকার প্রত্যাশা করে তখন এটি ব্যবহার করুন, তবে আপনি কেবল এতে একটি উপাদানই পাস করতে চান। singletonList(থ্রেড-) নিরাপদ এবং দ্রুত।


ধন্যবাদ, এটি আরও ভাল উত্তর। আপনি এমনকি "স্পষ্টতই ব্যবহারের কেস আছে বলে বলার পরিবর্তে একটি উদাহরণ দিয়েছেন, তবে আমি সেগুলি সম্পর্কে জানি না"।
thepogrammer

3

আপনার অপরিবর্তনীয় প্রশ্নের উত্তর দিতে:

Collections.singletonListঅপরিবর্তনীয় তালিকা তৈরি করবে। একটি অপরিবর্তনীয় তালিকা (অযৌক্তিক তালিকা হিসাবেও উল্লেখ করা হয়) এর সামগ্রী পরিবর্তন করা যাবে না। আইটেমগুলি যুক্ত করতে বা সরিয়ে ফেলার পদ্ধতিগুলি যদি আপনি বিষয়বস্তুগুলি পরিবর্তন করার চেষ্টা করেন তবে ব্যতিক্রম ছুঁড়ে ফেলা হবে।

একটি সিঙ্গলটন তালিকায় কেবলমাত্র সেই আইটেম রয়েছে এবং এটি পরিবর্তন করা যায় না।


2

যদি কোনও অপরিবর্তনীয় / সিঙ্গেলটন সংগ্রহগুলি এমন একটিকে বোঝায় যা কেবলমাত্র একটি অবজেক্ট রয়েছে এবং যা আরও পরিবর্তিত হয় না, তবে একই কার্যকারিতা কেবলমাত্র একটি অবজেক্টের সংকলন "আনমোডাইফাইয়েবল কালেকশন" করে অর্জন করা যেতে পারে। যেহেতু একই কার্যকারিতাটি কোনও অবজেক্টের সাথে আনমোডাইফাইয়েবল কালেকশন দ্বারা অর্জন করা যায়, তবে সিঙ্গেলটন সংগ্রহটি কোন বিশেষ উদ্দেশ্যে কাজ করে?


একটি বস্তুর "স্বাভাবিক" উপায় এবং সিঙ্গলটন পদ্ধতি ব্যবহার করে একটি অবিরাম পরিবর্তনযোগ্য সংগ্রহ তৈরি করুন। তারপরে আপনি তাত্ক্ষণিকভাবে দেখুন কেন।
কেপ

1

সিঙ্গলটনলিস্ট কোনও বস্তুর উদাহরণ ধরে রাখতে পারে। অবজেক্টের স্থিতি পরিবর্তন করা যেতে পারে।

List<Character> list = new ArrayList<Character>();
list.add('X');
list.add('Y');
System.out.println("Initial list: "+ list);
List<List<Character>> list2 = Collections.singletonList(list);
list.add('Z');
System.out.println(list);
System.out.println(list2);

আমরা উপরোক্ত মত সংশোধনযোগ্য তালিকাটি সংজ্ঞায়িত করতে পারি না।

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