একটি আইটেম সম্বলিত একটি তালিকা তৈরি করার জন্য কালেকশন.সেসলটনলাইস্টের (কিছু) উপরে অ্যারেএস.এললিস্ট (কিছু) ব্যবহার করার কোনও সুবিধা (বা অনেক পার্থক্য) রয়েছে কি? পরেরটি প্রত্যাবর্তিত তালিকার পাশাপাশি অপরিবর্তনীয় করে তোলে।
একটি আইটেম সম্বলিত একটি তালিকা তৈরি করার জন্য কালেকশন.সেসলটনলাইস্টের (কিছু) উপরে অ্যারেএস.এললিস্ট (কিছু) ব্যবহার করার কোনও সুবিধা (বা অনেক পার্থক্য) রয়েছে কি? পরেরটি প্রত্যাবর্তিত তালিকার পাশাপাশি অপরিবর্তনীয় করে তোলে।
উত্তর:
Collections.singletonList(something)
হয় অপরিবর্তনীয় যেহেতু Arrays.asList(something)
একটি নির্দিষ্ট আকার List
একটি অ্যারের যেখানে তালিকা এবং এরে গাদা যোগদান পরার প্রতিনিধিত্ব।
Arrays.asList(something)
এটিতে অ-কাঠামোগত পরিবর্তনের অনুমতি দেয় যা তালিকা এবং সংযুক্ত অ্যারে উভয়ই প্রতিফলিত হয়। এটা ছুড়ে ফেলেUnsupportedOperationException
একটি নির্দিষ্ট সূচকের জন্য একটি উপাদান সেট করতে সক্ষম হওয়া সত্ত্বেও উপাদানগুলি যুক্ত করার জন্য ।
তালিকাতে ফিরে আসা যে কোনও পরিবর্তন এর Collections.singletonList(something)
ফলে আসবে UnsupportedOperationException
।
এছাড়াও, প্রদত্ত তালিকার ক্ষমতা Collections.singletonList(something)
সর্বদা 1Arrays.asList(something)
হবে যার ক্ষমতা ব্যাকড অ্যারের আকার হবে unlike
আমি কেবল যুক্ত করব যে সিঙ্গলটনলিস্টটি একটি অ্যারের দ্বারা সমর্থনযোগ্য নয় এবং কেবলমাত্র সেই আইটেমটির একটি উল্লেখ রয়েছে। সম্ভবত, এটি কম স্মৃতি গ্রহণ করবে এবং আপনি যে তালিকা তৈরি করতে চান তার উপর নির্ভর করে তা উল্লেখযোগ্য হতে পারে।
পদ্ধতিটি Arrays.asList
নির্দিষ্ট অ্যারে দ্বারা ব্যাকড একটি নির্দিষ্ট আকারের তালিকা দেয় returns পদ্ধতিটি একটি উদাহরণ দেয় ArrayList
যা প্রাইভেট নেস্টেড স্ট্যাটিক ক্লাসটি প্রসারিত করে AbstractList
না java.util.ArrayList
। এই স্ট্যাটিক বর্গটি কয়েকটি পদ্ধতির যেমন set, indexOf, forEach, replaceAll
ইত্যাদি ইত্যাদির বাস্তবায়ন সরবরাহ করে তবে আমরা যখন প্রার্থনা add
করি তখন এটির নিজস্ব কোনও প্রয়োগ হয় না, বরং যে পদ্ধতিটি AbstractList
নিক্ষেপ করা হয় তা থেকে পদ্ধতিটি আহ্বান করা হয় java.lang.UnsupportedOperationException
।
Collections.singletonList
একটি ফেরৎ অপরিবর্তনীয় তালিকা শুধুমাত্র নির্দিষ্ট অবজেক্ট ধারণকারী এবং ভাল হিসাবে এটি serializable হয়।
পার্শ্ব নোটে, অপরিবর্তনীয় তালিকার জন্য আমরা সাধারণত ব্যবহার করি Collections.unmodifiableList
যা নির্দিষ্ট তালিকার একটি অবিশ্বাস্য দৃশ্য প্রদর্শন করে।
List<String> srcList = Arrays.asList("Apple", "Mango", "Banana");
var fruits = new ArrayList<>(srcList);
var unmodifiableList = Collections.unmodifiableList(fruits);
fruits.set(0, "Apricot");
var modFruit = unmodifiableList.get(0);
System.out.println(modFruit); // prints Apricot
একটি অপরিবর্তনীয় দৃশ্যের সংগ্রহ হ'ল এমন একটি সংগ্রহ যা অনিবার্যযোগ্য নয় এবং এটি একটি ব্যাকিং সংগ্রহের মধ্যেও একটি দৃশ্য। নোট করুন যে ব্যাকিং সংগ্রহে পরিবর্তনগুলি এখনও সম্ভব হতে পারে এবং যদি এটি ঘটে থাকে তবে তারা অবিস্মরণীয় দৃশ্যের মাধ্যমে দৃশ্যমান।
জাভা 10 এবং তারপরে আমাদের একটি সত্য পরিবর্তনযোগ্য তালিকা থাকতে পারে । সত্যিকারের অবিরাম পরিবর্তনযোগ্য তালিকা পাওয়ার দুটি উপায় রয়েছে :
var unmodifiableList = List.copyOf(srcList);
var unmodifiableList = srcList.stream().collect(Collectors.toUnmodifiableList());
যদি এই দুটি ভেরিয়েবলের কোনও মান ব্যবহার করা হয় তবে এটি "অ্যাপল" হবে এবং "এপ্রিকোট" নয়। অনুযায়ী ডক এর জাভা 10 :
List.of
এবংList.copyOf
স্ট্যাটিক কারখানা পদ্ধতি unmodifiable তালিকা তৈরি করতে একটি সুবিধাজনক উপায় প্রদান। এই পদ্ধতিগুলির দ্বারা তৈরি তালিকার উদাহরণগুলির নিম্নলিখিত বৈশিষ্ট্য রয়েছে:
- তারা আপত্তিযোগ্য । উপাদানগুলি যুক্ত, সরানো বা প্রতিস্থাপন করা যায় না। তালিকায় কোনও মিউটর পদ্ধতিতে কল করা সর্বদা
UnsupportedOperationException
নিক্ষেপ করার কারণ হবে। তবে, অন্তর্ভুক্ত উপাদানগুলি যদি নিজেরাই পরিবর্তনযোগ্য হয় তবে এটি তালিকার বিষয়বস্তুগুলি পরিবর্তিত হতে পারে।- তারা নাল উপাদানগুলিকে অস্বীকার করে। তাদের নাল উপাদানের সঙ্গে তৈরি করার প্রচেষ্টা ফলে
NullPointerException
।- সমস্ত উপাদান সিরিয়ালযোগ্য হলে সেগুলি সিরিয়ালাইজযোগ্য।
- তালিকার উপাদানগুলির ক্রম সরবরাহ করা আর্গুমেন্টের ক্রম বা সরবরাহ করা অ্যারেতে থাকা উপাদানগুলির সমান।
- তারা হয়
value-based
। কলকারীদের ফিরে আসা দৃষ্টান্তগুলির পরিচয় সম্পর্কে কোনও অনুমান করা উচিত নয়। কারখানাগুলি নতুন দৃষ্টান্ত তৈরি করতে বা বিদ্যমানগুলিকে পুনরায় ব্যবহার করতে মুক্ত। সুতরাং, এই দৃষ্টান্তগুলিতে পরিচয় সংবেদনশীল ক্রিয়াকলাপগুলি (রেফারেন্স সমতা (==), পরিচয় হ্যাশ কোড এবং সিঙ্ক্রোনাইজেশন) অবিশ্বাস্য এবং এড়ানো উচিত।- সিরিয়ালাইজড ফর্ম পৃষ্ঠায় উল্লিখিত হিসাবে সেগুলি সিরিয়ালাইজ করা হয়েছে ।
ImmutableList.of()
এবংLists.newArrayList()
মিশ্রণটিও ফেলে দিতে পারেন ।