অ্যারে.এএসলিস্ট () বনাম কালেকশনস.সেলটনটন তালিকা ()


136

একটি আইটেম সম্বলিত একটি তালিকা তৈরি করার জন্য কালেকশন.সেসলটনলাইস্টের (কিছু) উপরে অ্যারেএস.এললিস্ট (কিছু) ব্যবহার করার কোনও সুবিধা (বা অনেক পার্থক্য) রয়েছে কি? পরেরটি প্রত্যাবর্তিত তালিকার পাশাপাশি অপরিবর্তনীয় করে তোলে।


8
আপনি পেয়ারা ImmutableList.of()এবং Lists.newArrayList()মিশ্রণটিও ফেলে দিতে পারেন ।
বাইজিক্লোপ

এটির পক্ষে হিসাবে, আমার যখন কালচার্স.সেনলেটনলিস্ট () সমস্যার পরেছিল তখন কোনও পদ্ধতির কোনও তালিকা কোনও তালিকা ফিরিয়ে দেয় যা পরে প্রবাহিত প্রবাহিত হয় down
হাওয়ার্ড গ্রিমবার্গ

1
: জাভা 10 সত্য অপরিবর্তনীয় তালিকা আছে stackoverflow.com/a/52536126/1216775
akhil_mittal

উত্তর:


205

Collections.singletonList(something)হয় অপরিবর্তনীয় যেহেতু Arrays.asList(something)একটি নির্দিষ্ট আকার Listএকটি অ্যারের যেখানে তালিকা এবং এরে গাদা যোগদান পরার প্রতিনিধিত্ব।

Arrays.asList(something)এটিতে অ-কাঠামোগত পরিবর্তনের অনুমতি দেয় যা তালিকা এবং সংযুক্ত অ্যারে উভয়ই প্রতিফলিত হয়। এটা ছুড়ে ফেলেUnsupportedOperationException একটি নির্দিষ্ট সূচকের জন্য একটি উপাদান সেট করতে সক্ষম হওয়া সত্ত্বেও উপাদানগুলি যুক্ত করার জন্য ।

তালিকাতে ফিরে আসা যে কোনও পরিবর্তন এর Collections.singletonList(something)ফলে আসবে UnsupportedOperationException

এছাড়াও, প্রদত্ত তালিকার ক্ষমতা Collections.singletonList(something)সর্বদা 1Arrays.asList(something) হবে যার ক্ষমতা ব্যাকড অ্যারের আকার হবে unlike


63

আমি কেবল যুক্ত করব যে সিঙ্গলটনলিস্টটি একটি অ্যারের দ্বারা সমর্থনযোগ্য নয় এবং কেবলমাত্র সেই আইটেমটির একটি উল্লেখ রয়েছে। সম্ভবত, এটি কম স্মৃতি গ্রহণ করবে এবং আপনি যে তালিকা তৈরি করতে চান তার উপর নির্ভর করে তা উল্লেখযোগ্য হতে পারে।


এই লিখিত বা স্মৃতি কার্যকারিতা পয়েন্ট ব্যাক করতে কোন লিঙ্ক বা কোড? আমার কাছে এই অ্যারেএস.এললিস্ট (কেবলমাত্র ওয়ানডিকোয়েন্টিইউবিজেইসিটি) একটি কোডবেজ জুড়ে বিস্তৃতভাবে লেখা আছে এবং সংগ্রহগুলি.সেনলেটনলিস্টের পরিবর্তে () স্মৃতি দক্ষতার দিকে নিয়ে যায় কিনা তা জানতে চাই?
রাহুল সায়নী


12

পদ্ধতিটি 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 এবং তারপরে আমাদের একটি সত্য পরিবর্তনযোগ্য তালিকা থাকতে পারে । সত্যিকারের অবিরাম পরিবর্তনযোগ্য তালিকা পাওয়ার দুটি উপায় রয়েছে :

  1. var unmodifiableList = List.copyOf(srcList);
  2. var unmodifiableList = srcList.stream().collect(Collectors.toUnmodifiableList()); যদি এই দুটি ভেরিয়েবলের কোনও মান ব্যবহার করা হয় তবে এটি "অ্যাপল" হবে এবং "এপ্রিকোট" নয়।

অনুযায়ী ডক এর জাভা 10 :

List.ofএবং List.copyOfস্ট্যাটিক কারখানা পদ্ধতি unmodifiable তালিকা তৈরি করতে একটি সুবিধাজনক উপায় প্রদান। এই পদ্ধতিগুলির দ্বারা তৈরি তালিকার উদাহরণগুলির নিম্নলিখিত বৈশিষ্ট্য রয়েছে:

  1. তারা আপত্তিযোগ্য । উপাদানগুলি যুক্ত, সরানো বা প্রতিস্থাপন করা যায় না। তালিকায় কোনও মিউটর পদ্ধতিতে কল করা সর্বদা UnsupportedOperationExceptionনিক্ষেপ করার কারণ হবে। তবে, অন্তর্ভুক্ত উপাদানগুলি যদি নিজেরাই পরিবর্তনযোগ্য হয় তবে এটি তালিকার বিষয়বস্তুগুলি পরিবর্তিত হতে পারে।
  2. তারা নাল উপাদানগুলিকে অস্বীকার করে। তাদের নাল উপাদানের সঙ্গে তৈরি করার প্রচেষ্টা ফলে NullPointerException
  3. সমস্ত উপাদান সিরিয়ালযোগ্য হলে সেগুলি সিরিয়ালাইজযোগ্য।
  4. তালিকার উপাদানগুলির ক্রম সরবরাহ করা আর্গুমেন্টের ক্রম বা সরবরাহ করা অ্যারেতে থাকা উপাদানগুলির সমান।
  5. তারা হয় value-based। কলকারীদের ফিরে আসা দৃষ্টান্তগুলির পরিচয় সম্পর্কে কোনও অনুমান করা উচিত নয়। কারখানাগুলি নতুন দৃষ্টান্ত তৈরি করতে বা বিদ্যমানগুলিকে পুনরায় ব্যবহার করতে মুক্ত। সুতরাং, এই দৃষ্টান্তগুলিতে পরিচয় সংবেদনশীল ক্রিয়াকলাপগুলি (রেফারেন্স সমতা (==), পরিচয় হ্যাশ কোড এবং সিঙ্ক্রোনাইজেশন) অবিশ্বাস্য এবং এড়ানো উচিত।
  6. সিরিয়ালাইজড ফর্ম পৃষ্ঠায় উল্লিখিত হিসাবে সেগুলি সিরিয়ালাইজ করা হয়েছে ।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.