সহজ উত্তর
ইন জাভা 9 বা পরবর্তী পর List.of()যোগ করা হয়েছিল:
List<String> strings = List.of("foo", "bar", "baz");
সঙ্গে জাভা 10 বা পরে সঙ্গে, এই সংক্ষিপ্ত করা যেতে পারে varশব্দ।
var strings = List.of("foo", "bar", "baz");
এই আপনি একটি দেব অপরিবর্তনীয় List , তাই এটি পরিবর্তন করা যাবে না।
আপনি যেখানে প্রিপোপুলেশন করছেন বেশিরভাগ ক্ষেত্রে আপনি যা চান তা চাই।
জাভা 8 বা তার আগের:
List<String> strings = Arrays.asList("foo", "bar", "baz");
এটি আপনাকে Listঅ্যারে দ্বারা ব্যাকড দেবে , সুতরাং এটি দৈর্ঘ্য পরিবর্তন করতে পারে না।
তবে আপনি কল করতে পারেন List.set, সুতরাং এটি এখনও পরিবর্তনযোগ্য ।
আপনি Arrays.asListএকটি স্ট্যাটিক আমদানি দিয়ে আরও খাটো করতে পারেন :
List<String> strings = asList("foo", "bar", "baz");
স্থিতিশীল আমদানি:
import static java.util.Arrays.asList;
যে কোনও আধুনিক আইডিই আপনাকে পরামর্শ দেবে এবং স্বয়ংক্রিয়ভাবে আপনার জন্য করবে।
উদাহরণস্বরূপ ইন্টেলিজ আইডিইএতে আপনি টিপুন Alt+Enterএবং নির্বাচন করুন Static import method...।
তবে আমি List.ofপদ্ধতিটি ছোট করার প্রস্তাব দিচ্ছি না of, কারণ এটি বিভ্রান্তিকর হয়ে ওঠে becomes
List.ofইতিমধ্যে যথেষ্ট সংক্ষিপ্ত এবং ভাল পড়া।
ব্যবহার করে Streamএস
কেন এটি হতে হবে List?
জাভা 8 বা তার পরে আপনি Streamআরও নমনীয় একটি ব্যবহার করতে পারেন :
Stream<String> strings = Stream.of("foo", "bar", "baz");
আপনি Streamগুলি যোগ করতে পারেন :
Stream<String> strings = Stream.concat(Stream.of("foo", "bar"),
Stream.of("baz", "qux"));
অথবা আপনি একটি থেকে যেতে পারেন Streamএকটি থেকে List:
import static java.util.stream.Collectors.toList;
List<String> strings = Stream.of("foo", "bar", "baz").collect(toList());
কিন্তু বাঞ্ছনীয়, শুধু ব্যবহার Streamএকটি এটি সংগ্রহ করা ছাড়া List।
আপনার যদি সত্যই বিশেষত প্রয়োজন হয়java.util.ArrayList
(আপনি সম্ভবত না।) জেপ 269 (জোর আমার)
উদ্ধৃতি :
একটা হল ছোট সেট মূল্যবোধের একটি পূর্বনির্ধারিত সেট দিয়ে একটি চপল সংগ্রহ উদাহরণস্বরূপ আরম্ভের জন্য ব্যবহারে ক্ষেত্রে। এই পূর্বনির্ধারিত মানগুলি একটি অপরিবর্তনীয় সংগ্রহের মধ্যে থাকা এবং তারপরে অনুলিপি সংগ্রহের মাধ্যমে অনুলিপি সংগ্রহের মাধ্যমে প্রাথমিকভাবে শুরু করা ভাল।
আপনি যদি উভয়ই একটি প্রিপোপুলেট করতে চান ArrayList এবং তারপরে (কেন?) যুক্ত করতে চান, ব্যবহার করুন
ArrayList<String> strings = new ArrayList<>(List.of("foo", "bar"));
strings.add("baz");
বা জাভা 8 বা তার আগের:
ArrayList<String> strings = new ArrayList<>(asList("foo", "bar"));
strings.add("baz");
বা ব্যবহার Stream:
import static java.util.stream.Collectors.toCollection;
ArrayList<String> strings = Stream.of("foo", "bar")
.collect(toCollection(ArrayList::new));
strings.add("baz");
তবে আবার এটি Streamএটিকে সংগ্রহ করার পরিবর্তে সরাসরি ব্যবহার করা ভাল List।
ইন্টারফেস প্রোগ্রাম, বাস্তবায়ন না
আপনি বলেছিলেন যে আপনি তালিকাটিকে ArrayListআপনার কোড হিসাবে একটি হিসাবে ঘোষণা করেছেন , তবে আপনি কেবল তখনই তা করা উচিত যদি আপনি ArrayListএর মধ্যে নেই এমন কোনও সদস্য ব্যবহার করছেন List।
যা আপনি সম্ভবত করছেন না।
সাধারণত আপনি শুধু সবচেয়ে সাধারণ ইন্টারফেস আপনার ব্যবহারের জন্য যাচ্ছি (যেমন দ্বারা ভেরিয়েবল ডিক্লেয়ার করা উচিত Iterable, Collectionঅথবা List(যেমন), এবং তাদের নির্দিষ্ট বাস্তবায়ন আরম্ভ ArrayList, LinkedListবা Arrays.asList())।
অন্যথায় আপনি আপনার কোডটিকে সেই নির্দিষ্ট ধরণের মধ্যে সীমাবদ্ধ করছেন এবং আপনি যখন চান তখন এটি পরিবর্তন করা আরও শক্ত হবে।
উদাহরণস্বরূপ, যদি আপনি একটি পার করছি ArrayListএকটি থেকে void method(...):
// Iterable if you just need iteration, for (String s : strings):
void method(Iterable<String> strings) {
for (String s : strings) { ... }
}
// Collection if you also need .size(), .isEmpty(), or .stream():
void method(Collection<String> strings) {
if (!strings.isEmpty()) { strings.stream()... }
}
// List if you also need .get(index):
void method(List<String> strings) {
strings.get(...)
}
// Don't declare a specific list implementation
// unless you're sure you need it:
void method(ArrayList<String> strings) {
??? // You don't want to limit yourself to just ArrayList
}
অন্য একটি উদাহরণ সর্বদা পরিবর্তনশীল হিসাবে ঘোষিত InputStreamহবে যদিও এটি সাধারণত এক FileInputStreamবা একটি হয় BufferedInputStream, কারণ একদিন শীঘ্রই আপনি বা অন্য কেউ অন্য কোনও ধরণের ব্যবহার করতে চাইবেন InputStream।
ArrasyList<String> places = ["Buenos Aires", "Córdoba", "La Plata"]