सवाल जावा में तारों की सूची शुरू करने का सबसे छोटा तरीका क्या है?


मैं स्ट्रिंग्स और तारों की सरणी की सूची आरंभ करने के लिए सबसे छोटा रास्ता (कोड में) खोज रहा हूं, यानी सूची / सरणी "एस 1", "एस 2", "एस 3" स्ट्रिंग तत्व।


44
2018-06-29 12:08


मूल




जवाब:


कई विकल्प हैं। व्यक्तिगत रूप से मुझे उपयोग करना पसंद है अमरूद:

List<String> strings = Lists.newArrayList("s1", "s2", "s3");

(गुवा का एक पुस्तकालय वैसे भी है, बेशक :)

केवल जेडीके का उपयोग करके, आप इसका उपयोग कर सकते हैं:

List<String> strings = Arrays.asList("s1", "s2", "s3");

ध्यान दें कि यह एक वापस आ जाएगा ArrayList, लेकिन है कि नहीं साधारण java.util.ArrayList - यह एक आंतरिक है जो परिवर्तनीय लेकिन निश्चित आकार है।

व्यक्तिगत रूप से मैं अमरूद संस्करण पसंद करता हूं क्योंकि यह स्पष्ट करता है कि क्या हो रहा है (सूची कार्यान्वयन जो वापस किया जाएगा)। यह भी है फिर भी अगर आप विधिवत रूप से विधि आयात करते हैं तो क्या हो रहा है यह स्पष्ट करें:

// import static com.google.common.collect.Lists.newArrayList;
List<String> strings = newArrayList("s1", "s2", "s3");

... जबकि आप स्थिर रूप से आयात करते हैं asList यह थोड़ा गंध दिखता है।

एक अन्य अमरूद विकल्प, यदि आप एक संशोधित-में-किसी भी तरह की सूची नहीं चाहते हैं:

ImmutableList<String> strings = ImmutableList.of("s1", "s2", "s3");

मैं आमतौर पर करना चाहता हूँ भी पूरी तरह से परिवर्तनीय सूची है (इस मामले में Lists.newArrayList श्रेष्ठ है) या एक पूरी तरह से अपरिवर्तनीय सूची (जिस मामले में ImmutableList.of श्रेष्ठ है)। यह दुर्लभ है कि मैं वास्तव में चाहते हैं एक परिवर्तनीय-लेकिन-निश्चित आकार की सूची।


87
2018-06-29 12:10



अच्छा ....Arrays.asList() वही काम करता है ..... :) - Buhake Sindi
क्यों नहीं Arrays.asList ("s1", "s2", "s3")? - BegemoT
@ बेगमो: मैं इसे जोड़ रहा था - व्यक्तिगत रूप से मैं गुवा संस्करण की स्पष्ट प्रकृति को प्राथमिकता देता हूं। - Jon Skeet
जो अपरिवर्तनीय है - यह वास्तव में संशोधित है (लेकिन निश्चित आकार)। - aioobe
@aioobe: Eek - ठीक हो जाएगा, धन्यवाद। - Jon Skeet


जावा 9 +

जावा 9 एक सुविधा विधि पेश करता है List.of निम्नानुसार उपयोग किया जाता है:

List<String> l = List.of("s1", "s2", "s3");

जावा 8 और पुराने

यहां कुछ विकल्प दिए गए हैं:

// Short, but the resulting list is fixed size.
List<String> list1 = Arrays.asList("s1", "s2", "s3");

// Similar to above, but the resulting list can grow.
List<String> list2 = new ArrayList<>(Arrays.asList("s1", "s2", "s3"));

// Using initialization block. Useful if you need to "compute" the strings.
List<String> list3 = new ArrayList<String>() {{
    add("s1");
    add("s2");
    add("s3");
}};


जब सरणी की बात आती है, तो आप इसे इस तरह की घोषणा के बिंदु पर प्रारंभ कर सकते हैं:

String[] arr = { "s1", "s2", "s3" };

यदि आपको इसे फिर से शुरू करने या इसे एक चर में संग्रहीत किए बिना बनाने की आवश्यकता है, तो आप करते हैं

new String[] { "s1", "s2", "s3" }

यदि स्ट्रिंग स्थिरांक हालांकि हो सकते हैं, तो ऐसा लगेगा

String[] arr = { "s1", "s2", "s3", "s4", "s5", "s6", "s7", "s8", "s9", "s10",
                 "s11", "s12", "s13" };

इन में मैं आमतौर पर लेखन पसंद करते हैं

String[] arr = "s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11,s12,s13".split(",");

22
2018-06-29 12:12



@ द एलिट जेंटलमैन: Arrays.asList का परिणाम अपरिवर्तनीय है। यदि एक नई ArrayList के रूप में बनाया गया है str2 तो बाद में सूची में जोड़ना संभव है। - Mathias Schwarz
@Mathias Schwarz, अपरिवर्तनीय, निश्चित आकार नहीं है। - aioobe
@aioobe: तुम सही हो! मौजूदा प्रविष्टियों को ओवरराइट करना संभव है। - Mathias Schwarz
+1, स्पष्टीकरण के साथ उत्तर के लिए। - mre
आपको ध्यान रखना चाहिए कि प्रारंभिक ब्लॉक संस्करण ArrayList कक्षा का एक अज्ञात उपclass बनाता है। - Paŭlo Ebermann


List<String> stringList = Arrays.asList("s1", "s2", "s3");

ये सभी वस्तुएं जेडीके में मौजूद हैं।

पुनश्च: जैसा aioobe कहा, यह सूची तय आकार बदलता है।


14
2018-06-29 12:10



परिणामी सूची हालांकि तय आकार है। - aioobe
@aioobe, धन्यवाद ... अद्यतन पोस्ट। - Buhake Sindi


आप इसका उपयोग कर सकते हैं Arrays मानक जावा एपीआई में कक्षा: http://download.oracle.com/javase/6/docs/api/java/util/Arrays.html#asList(T...)

List<String> strings = Arrays.asList("s1", "s2", "s3");

ध्यान रखें कि परिणाम सूची निश्चित आकार है (आप इसमें शामिल नहीं कर सकते हैं)।


3
2018-06-29 12:12





साथ में ग्रहण संग्रह, आप निम्नलिखित लिख सकते हैं:

List<String> list = Lists.mutable.with("s1", "s2", "s3");

आप प्रकारों के बारे में अधिक विशिष्ट हो सकते हैं और चाहे वे उत्परिवर्तनीय या अपरिवर्तनीय हों।

MutableList<String> mList = Lists.mutable.with("s1", "s2", "s3");
ImmutableList<String> iList = Lists.immutable.with("s1", "s2", "s3");

आप सेट्स, बैग और मैप्स के साथ भी ऐसा ही कर सकते हैं:

Set<String> set = Sets.mutable.with("s1", "s2", "s3");
MutableSet<String> mSet = Sets.mutable.with("s1", "s2", "s3");
ImmutableSet<String> iSet = Sets.immutable.with("s1", "s2", "s3");

Bag<String> bag = Bags.mutable.with("s1", "s2", "s3");
MutableBag<String> mBag = Bags.mutable.with("s1", "s2", "s3");
ImmutableBag<String> iBag = Bags.immutable.with("s1", "s2", "s3");

Map<String, String> map = 
    Maps.mutable.with("s1", "s1", "s2", "s2", "s3", "s3");
MutableMap<String, String> mMap = 
    Maps.mutable.with("s1", "s1", "s2", "s2", "s3", "s3");
ImmutableMap<String, String> iMap = 
    Maps.immutable.with("s1", "s1", "s2", "s2", "s3", "s3");

सॉर्टेडसेट्स, सॉर्टेडबैग और सॉर्टेड मैप्स के लिए कारखानियां भी हैं।

SortedSet<String> sortedSet = SortedSets.mutable.with("s1", "s2", "s3");
MutableSortedSet<String> mSortedSet = SortedSets.mutable.with("s1", "s2", "s3");
ImmutableSortedSet<String> iSortedSet = SortedSets.immutable.with("s1", "s2", "s3");

SortedBag<String> sortedBag = SortedBags.mutable.with("s1", "s2", "s3");
MutableSortedBag<String> mSortedBag = SortedBags.mutable.with("s1", "s2", "s3");
ImmutableSortedBag<String> iSortedBag = SortedBags.immutable.with("s1", "s2", "s3");

SortedMap<String, String> sortedMap =
        SortedMaps.mutable.with("s1", "s1", "s2", "s2", "s3","s3");
MutableSortedMap<String, String> mSortedMap =
        SortedMaps.mutable.with("s1", "s1", "s2", "s2", "s3","s3");
ImmutableSortedMap<String, String> iSortedMap =
        SortedMaps.immutable.with("s1", "s1", "s2", "s2", "s3","s3");

ध्यान दें: मैं ग्रहण संग्रह के लिए एक कमिश्नर हूँ।


2
2018-01-29 03:32





JDK2

List<String> list = Arrays.asList("one", "two", "three");

JDK7

//diamond operator
List<String> list = new ArrayList<>();
list.add("one");
list.add("two");
list.add("three");

JDK8

List<String> list = Stream.of("one", "two", "three").collect(Collectors.toList());

JDK9

List<String> list = List.of("one", "two", "three");

इसके अलावा गुवा जैसे अन्य पुस्तकालयों द्वारा आपूर्ति किए जाने वाले कई अन्य तरीके हैं।


1
2018-05-08 09:02





मैं अमरूद से परिचित नहीं हूं, लेकिन अन्य उत्तरों में उल्लिखित लगभग सभी समाधान और जेडीके पीड़ितों का उपयोग करने में कुछ त्रुटियां हैं:

  1. Arrays.asList विधि एक निश्चित आकार की सूची देता है।

  2. {{डबल-ब्रेस प्रारंभिक}} क्लासपाथ अव्यवस्था बनाने के लिए जाना जाता है और निष्पादन धीमा करो। इसे प्रति तत्व कोड की एक पंक्ति की भी आवश्यकता होती है।

  3. जावा 9: स्थिर फैक्ट्री विधि List.ofएक संरचनात्मक रूप से अपरिवर्तनीय सूची देता है। इसके अलावा, List.of है मूल्य आधारित, और इसलिए इसका अनुबंध गारंटी नहीं देता है कि यह हर बार एक नई वस्तु वापस कर देगा।


यहां एक से अधिक व्यक्तिगत वस्तुओं को इकट्ठा करने के लिए जावा 8 एक-लाइनर है ArrayList, या उस मामले के लिए कोई संग्रह।

List<String> list = Stream.of("s1", "s2", "s3").collect(Collectors.toCollection(ArrayList::new));

ध्यान दें: एक ट्रांजिटरी संग्रह की प्रतिलिपि बनाने का एओओब का समाधान (new ArrayList<>(Arrays.asList("s1", "s2", "s3"))) भी उत्कृष्ट है।


0
2018-01-29 01:24