सरल उत्तर
में जावा 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;
जो कोई भी आधुनिक आईडीई सुझाव देगा और स्वचालित रूप से आपके लिए करेगा।
IntelliJ IDEA में उदाहरण के लिए आप दबाएँ Alt+Enterऔर चुनें Static import method...।
हालाँकि, मैं छोटा करने की सलाह नहीं देता List.of विधि को करता of, क्योंकि यह भ्रामक हो जाता है।
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
(आप शायद नहीं।)
बोली के लिए JEP 269 (जोर मेरा) :
एक छोटा सा सेट हैमूल्यों के पूर्वनिर्धारित सेट के साथ एक उत्परिवर्तित संग्रह उदाहरण को शुरू करने के लिए उपयोग के मामलों है। आमतौर पर उन पूर्वनिर्धारित मूल्यों को एक अपरिवर्तनीय संग्रह में रखना बेहतर होता है, और फिर एक प्रतिलिपि निर्माता के माध्यम से उत्परिवर्तित संग्रह को आरंभ करना।
आप चाहते हैं दोनों prepopulate एक 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"]