(পুরানো থ্রেড, তবে মাত্র 2 সেন্টে কেউ পেয়ারা বা অন্যান্য লিবিস এবং কিছু অন্যান্য বিবরণ উল্লেখ করে না)
আপনি যদি পারেন, পেয়ারা ব্যবহার করুন
পেয়ারা পথটি দেখানো মূল্যবান, যা এই শেননিগানকে ব্যাপকভাবে সরল করে:
ব্যবহার
অপরিবর্তনীয় তালিকার জন্য
ব্যবহার করুন ImmutableList
শ্রেণী ও এর of()
এবং copyOf()
কারখানা পদ্ধতি (উপাদান নাল না হতে পারে) :
List<String> il = ImmutableList.of("string", "elements"); // from varargs
List<String> il = ImmutableList.copyOf(aStringArray); // from array
একটি পরিবর্তনীয় তালিকার জন্য
ব্যবহার করুন Lists
শ্রেণী ও এর newArrayList()
কারখানা পদ্ধতি:
List<String> l1 = Lists.newArrayList(anotherListOrCollection); // from collection
List<String> l2 = Lists.newArrayList(aStringArray); // from array
List<String> l3 = Lists.newArrayList("or", "string", "elements"); // from varargs
অন্যান্য ক্লাসে অন্যান্য ডেটা স্ট্রাকচারের জন্য অনুরূপ পদ্ধতিগুলিও নোট করুন, উদাহরণস্বরূপ Sets
।
টাইপ-সুরক্ষার জন্য জেনেরিকের কারণে বিশৃঙ্খলা হ্রাস করা প্রধান আকর্ষণ হতে পারে, কারণ পেয়ারা কারখানার পদ্ধতি ব্যবহারের ফলে বেশিরভাগ সময় এই ধরণের অনুমান করা যায়। যাইহোক, জাভা 7 নতুন ডায়মন্ড অপারেটরের সাথে আসার পরে এই যুক্তিতে কম জল রয়েছে।
তবে এটি একমাত্র কারণ নয় (এবং জাভা 7 এখনও সর্বত্র নেই): শর্টহ্যান্ড সিনট্যাক্সটিও খুব সহজ, এবং উপরের মতো পদ্ধতিগুলির সূচনাবিদরা আরও অভিব্যক্তিপূর্ণ কোড লেখার অনুমতি দেয়। আপনি একটি পেয়ারা কল করে যা বর্তমান জাভা সংগ্রহগুলির সাথে 2 নেয়।
যদি আপনি না পারেন ...
অপরিবর্তনীয় তালিকার জন্য
জেদেকে এর Arrays
ক্লাস এবং এর asList()
কারখানার পদ্ধতিটি ব্যবহার করুন, যা একটি দিয়ে মোড়ানো Collections.unmodifiableList()
:
List<String> l1 = Collections.unmodifiableList(Arrays.asList(anArrayOfElements));
List<String> l2 = Collections.unmodifiableList(Arrays.asList("element1", "element2"));
মনে রাখবেন যে, ফিরে টাইপ asList()
একটি হল List
একটি কংক্রিট ব্যবহার ArrayList
বাস্তবায়ন কিন্তু তা না হয় java.util.ArrayList
। এটি একটি অভ্যন্তরীণ প্রকার, যা একটিকে অনুকরণ করে ArrayList
তবে প্রকৃতপক্ষে পাস করা অ্যারেটিকে সরাসরি উল্লেখ করে এবং "লেখার মাধ্যমে" তৈরি করে (পরিবর্তনগুলি অ্যারেতে প্রতিফলিত হয়)।
এটি List
কেবলমাত্র একটি প্রসারিত করার মাধ্যমে API এর কয়েকটি পদ্ধতির মাধ্যমে পরিবর্তনগুলি নিষিদ্ধ করেছে AbstractList
(সুতরাং উপাদানগুলি যুক্ত করা বা অপসারণ করা অসমর্থিত) তবে এটি কলগুলিকে set()
উপাদানগুলিকে ওভাররাইড করার অনুমতি দেয় । সুতরাং এই তালিকাটি সত্যই স্থাবর নয় এবং একটি কলটি asList()
মোড়ানো উচিত Collections.unmodifiableList()
।
আপনার যদি পরিবর্তনীয় তালিকার প্রয়োজন হয় তবে পরবর্তী পদক্ষেপটি দেখুন।
পরিবর্তনীয় তালিকার জন্য
উপরের মতো একই, তবে একটি আসল সাথে আবৃত java.util.ArrayList
:
List<String> l1 = new ArrayList<String>(Arrays.asList(array)); // Java 1.5 to 1.6
List<String> l1b = new ArrayList<>(Arrays.asList(array)); // Java 1.7+
List<String> l2 = new ArrayList<String>(Arrays.asList("a", "b")); // Java 1.5 to 1.6
List<String> l2b = new ArrayList<>(Arrays.asList("a", "b")); // Java 1.7+
শিক্ষাগত উদ্দেশ্যগুলির জন্য: দ্য গুড ওল 'ম্যানুয়াল ওয়ে
// for Java 1.5+
static <T> List<T> arrayToList(final T[] array) {
final List<T> l = new ArrayList<T>(array.length);
for (final T s : array) {
l.add(s);
}
return (l);
}
// for Java < 1.5 (no generics, no compile-time type-safety, boo!)
static List arrayToList(final Object[] array) {
final List l = new ArrayList(array.length);
for (int i = 0; i < array.length; i++) {
l.add(array[i]);
}
return (l);
}