(पुराना धागा, लेकिन सिर्फ 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 लेता है।
अगर तुम नहीं कर सकते ...
एक अपरिवर्तनीय सूची के लिए
एक के साथ लिपटे JDK की 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
एपीआई के तरीकों में से कुछ के माध्यम से संशोधनों को मना करता है 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);
}