सरणी से ArrayList बनाएँ


3595

मेरे पास एक एरे है जो इनिशियलाइज्ड है जैसे:

Element[] array = {new Element(1), new Element(2), new Element(3)};

मैं इस एरे को ArrayListक्लास के ऑब्जेक्ट में बदलना चाहूंगा ।

ArrayList<Element> arraylist = ???;

49
Java9 में -> सूची <string> सूची = List.of ("हैलो", "विश्व", "से", "जावा");
मारेकम

18
@MarekM यह उत्तर गलत है, क्योंकि यह वापस नहीं आता है ArrayList। पोस्टर विशेष रूप से उस के लिए कहा।
डोरियन ग्रे

4
मुझे लगता है कि उसने सूची इंटरफ़ेस का उपयोग नहीं किया, क्योंकि यह सबसे अच्छा अभ्यास है। लेकिन अगर आप यहाँ चाहते हैं - नया ArrayList <> (List.of ("Hello", "World", "from", "Java"));
मारेकएम

10
बिंदु इंटरफ़ेस का उपयोग करने के बारे में नहीं है, मुद्दा यह है कि आपके समाधान में, लौटी हुई सूची असम्बद्ध है। यह एक समस्या का और अधिक हो सकता है, और एक कारण है कि उसने एक ArrayList के लिए कहा
डोरियन ग्रे

जवाबों:


4602
new ArrayList<>(Arrays.asList(array));

361
हां। और (सबसे आम) मामले में जहां आप सिर्फ एक सूची चाहते हैं, new ArrayListकॉल भी आवश्यक है।
कैलम

143
@ लॉरन - बस उपयोगList<ClassName> list = Arrays.asList(array)
पूल

247
@Calum और @Pool - जैसा कि एलेक्स मिलर के जवाब में नीचे उल्लेख किया गया है, Arrays.asList(array)इसे एक नई ArrayListवस्तु में पारित किए बिना उपयोग करने से सूची का आकार ठीक हो जाएगा। उपयोग करने के लिए अधिक सामान्य कारणों में से एक ArrayListगतिशील रूप से इसके आकार को बदलने में सक्षम होना है, और आपका सुझाव इसे रोक देगा।
कोड जॉकी

130
Arrays.asList () एक भयानक कार्य है, और आपको कभी भी इसके रिटर्न मान का उपयोग नहीं करना चाहिए। यह सूची टेम्पलेट को तोड़ता है, इसलिए हमेशा इसे यहां बताए गए रूप में उपयोग करें, भले ही यह निरर्थक लगता हो। अच्छा उत्तर।
एडम

83
@Adam कृपया javadoc का java.util.List के लिए अध्ययन करें। ऐड के लिए अनुबंध उन्हें एक UnsupportedOperationException को फेंकने की अनुमति देता है। docs.oracle.com/javase/7/docs/api/java/util/… एक वस्तु उन्मुख दृष्टिकोण से, यह बहुत अच्छा नहीं है कि कई बार आपको एक संग्रह का उपयोग करने के लिए ठोस कार्यान्वयन को जानना होगा - यह रूपरेखा को सरल बनाए रखने के लिए एक व्यावहारिक डिजाइन विकल्प था।
lbalazscs

918

दिया हुआ:

Element[] array = new Element[] { new Element(1), new Element(2), new Element(3) };

सबसे सरल उत्तर है:

List<Element> list = Arrays.asList(array);

यह ठीक काम करेगा। लेकिन कुछ चेतावनी:

  1. सूची सूची से वापस आ गई है जिसका आकार निश्चित है । इसलिए, यदि आप अपने कोड में दिए गए सूची से तत्वों को जोड़ना या निकालना चाहते हैं, तो आपको इसे एक नए में लपेटना होगा ArrayList। नहीं तो आप एUnsupportedOperationException
  2. से लौटी सूची asList()मूल सरणी द्वारा समर्थित है। यदि आप मूल सरणी को संशोधित करते हैं, तो सूची को भी संशोधित किया जाएगा। यह आश्चर्य की बात हो सकती है।

6
दोनों परिचालन की समय जटिलता क्या है? मेरा मतलब है कि स्पष्ट सरणी सूची निर्माण का उपयोग किए बिना।
लानत है

35
Arrays.asList () केवल मौजूदा सरणी को लपेटकर एक ArrayList बनाता है इसलिए यह O (1) है।
एलेक्स मिलर

27
एक नए ArrayList () में लपेटने से निश्चित आकार सूची के सभी तत्व पुनरावृत्त हो जाएंगे और नए ArrayList में जुड़ जाएंगे इसलिए O (n) है।
एलेक्स मिलर

8
सूची का कार्यान्वयन asList द्वारा वापस किया गया () सूची के कई तरीकों को लागू नहीं करता है (जैसे जोड़ें (), निकालें (), स्पष्ट (), आदि ...) जो UnsupportedOperationException को समझाता है। निश्चित रूप से एक चेतावनी ...
सेहरो

8
जब प्रश्न "एरेलेस्ट क्लास की एक वस्तु" के लिए पूछता है, तो मुझे लगता है कि यह जिस वर्ग को संदर्भित करता है उसे ग्रहण करना उचित है java.util.ArrayList। Arrays.asList वास्तव में एक रिटर्न देता है java.util.Arrays.ArrayListजो instanceofअन्य वर्ग नहीं है। तो एक तीसरा कैविएट यह है कि यदि आप इसे किसी संदर्भ में उपयोग करने की कोशिश करते हैं तो उपरोक्त की आवश्यकता नहीं है।
डेव एल।

352

(पुराना धागा, लेकिन सिर्फ 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);
}

27
+1 लेकिन ध्यान दें कि आपके Listद्वारा लौटाया गया Arrays.asListयह परिवर्तनशील है कि आप अभी भी setतत्वों को प्राप्त कर सकते हैं - यह केवल पुनरुत्थान योग्य नहीं है। अमरूद के बिना अपरिवर्तनीय सूचियों के लिए आप उल्लेख कर सकते हैं Collections.unmodifiableList
पॉल बेलोरा

1
@haylem शैक्षिक उद्देश्यों के लिए आपके अनुभाग में : अच्छा ol 'मैनुअल तरीका , arrayToListजावा 1.5+ के लिए आपका गलत है। आप Stringसामान्य पैरामीटर प्रकार का उपयोग करने के बजाय, दिए गए सरणी से सूचियों को संस्थापित कर रहे हैं , और दिए गए सरणी से तार निकालने की कोशिश कर रहे हैं T। इसके अलावा, अच्छा जवाब, और मैनुअल तरीके सहित केवल एक होने के लिए +1।
अफसानोस

Id '' यदि आप नहीं कर सकते हैं तो अपने सेक्शन का नाम बदल दें ... / "एक अपरिवर्तनीय सूची के लिए" "एक अपरिवर्तनीय सूची के लिए" क्योंकि यह लिपटे हुए सरणी में बाद के बदलावों द्वारा उत्परिवर्तित हो सकता है। यह अभी भी है O(1), लेकिन अपरिवर्तनीयता के लिए आपको एक प्रतिलिपि बनाना होगा, जैसे, द्वारा Collections.unmodifiableList(new ArrayList<>(Arrays.asList(array)))
Maaartinus

232

चूँकि यह प्रश्न बहुत पुराना है, इसलिए मुझे आश्चर्य हुआ कि किसी ने भी सरलतम रूप का सुझाव नहीं दिया:

List<Element> arraylist = Arrays.asList(new Element(1), new Element(2), new Element(3));

Java 5 के रूप में, Arrays.asList()एक varargs पैरामीटर लेता है और आपको सरणी का निर्माण स्पष्ट रूप से नहीं करना पड़ता है।


7
विशेष रूप से,List<String> a = Arrays.asList("first","second","third")
18446744073709551615

209
new ArrayList<T>(Arrays.asList(myArray));

सुनिश्चित करें कि myArrayजैसा है वैसा ही करें T। उदाहरण के लिए, यदि आप List<Integer>एक सरणी से बनाने का प्रयास करते हैं तो आपको एक कंपाइलर त्रुटि मिलेगी int


103

एक और तरीका (हालांकि अनिवार्य रूप से new ArrayList(Arrays.asList(array))समाधान प्रदर्शन-वार के बराबर है :

Collections.addAll(arraylist, array);

96

जावा ९

में जावा 9 , आप उपयोग कर सकते हैं List.ofताकि एक बनाने के लिए स्थिर कारखाने विधि Listशाब्दिक। कुछ इस प्रकार है:

List<Element> elements = List.of(new Element(1), new Element(2), new Element(3));

यह तीन तत्वों से युक्त एक अपरिवर्तनीय सूची लौटाएगा । यदि आप एक परिवर्तनशील सूची चाहते हैं , तो उस सूची को ArrayListकंस्ट्रक्टर के पास भेज दें :

new ArrayList<>(List.of(// elements vararg))

JEP 269: संग्रह के लिए सुविधा कारखाना विधियाँ

JEP 269 जावा कलेक्शंस एपीआई के लिए कुछ सुविधा कारखाने के तरीके प्रदान करता है। ये अपरिवर्तनीय स्थिर कारखाने तरीकों में बने होते हैं List, Setऔर Mapजावा 9 और बाद में इंटरफेस।


List.of () java.util की एक आवृत्ति वापस नहीं करेगा। क्रमानुसार, मूल प्रश्न में अनुरोध किया गया है। इसलिए केवल दूसरा विकल्प एक वैध उत्तर है।
त्रिकाद्र

84

आपको शायद एक सूची की आवश्यकता है, न कि एक ArrayList की। उस मामले में आप कर सकते हैं:

List<Element> arraylist = Arrays.asList(array);

8
यह मूल इनपुट सरणी द्वारा समर्थित होगा, यही वजह है कि आप (शायद) इसे एक नए ArrayList में लपेटना चाहते हैं।
छिपकली

16
इस उपाय से सावधान रहें। यदि आप देखें, Arrays ISN'T एक सच्चे java.util को वापस कर रहा है। यह एक आंतरिक वर्ग लौटा रहा है जो आवश्यक विधियों को लागू करता है, लेकिन आप सूची में मेमर्स को नहीं बदल सकते। यह एक सरणी के चारों ओर केवल एक आवरण है।
मिकज़्क्स 6r

1
आप सूची <तत्व> आइटम को एक ArrayList <तत्व> में ले जा सकते हैं
भिक्षु

12
@ माइकज़क्स 6 आर: थोड़ा सुधार : यह एक निश्चित आकार की सूची है। आप सूची (के तत्वों को बदल सकते हैं setविधि), आप सूची (नहीं के आकार को बदल नहीं सकते addया removeतत्वों)!
user85421

1
हां, कैविएट के साथ कि यह इस बात पर निर्भर करता है कि आप सूची के साथ क्या करना चाहते हैं। यह ध्यान देने योग्य है कि अगर ओपी केवल तत्वों के माध्यम से पुनरावृति करना चाहता है, तो सरणी को बिल्कुल भी परिवर्तित नहीं करना होगा।
पॉलमुर्रेक्रब

69

एक और अपडेट, लगभग 2014 के अंत में, आप इसे जावा 8 के साथ भी कर सकते हैं:

ArrayList<Element> arrayList = Stream.of(myArray).collect(Collectors.toCollection(ArrayList::new));

कुछ वर्ण सहेजे जाएंगे, यदि यह सिर्फ एक हो सकता है List

List<Element> list = Stream.of(myArray).collect(Collectors.toList());

8
यह शायद कार्यान्वयन-निर्भर नहीं होने के लिए सबसे अच्छा है, लेकिन Collectors.toList()वास्तव में एक रिटर्न देता है ArrayList
bcsb1001

Stream.of का गलत उपयोग (...); वह एक तत्व धारा बनाएगा। इसके बजाय Arrays.stream का उपयोग करें
पैट्रिक पार्कर

मुझे नहीं लगता है, 2 विकल्प वैध हैं, लेकिन Arrays.stream थोड़ा 'बेहतर' है क्योंकि आप इसे निश्चित आकार के साथ बना सकते हैं, 'स्टार्ट', 'एंड' आर्ग के साथ ओवरलोड विधि का उपयोग कर सकते हैं। इसे भी देखें: stackoverflow.com/a/27888447/2619091
Whyem

41

यदि तुम प्रयोग करते हो :

new ArrayList<T>(Arrays.asList(myArray));

आप दो सूची बना और भर सकते हैं ! दो बार एक बड़ी सूची भरना ठीक वही है जो आप नहीं करना चाहते हैं क्योंकि यह हर बार एक और सरणी बनाएगा जो क्षमता को विस्तारित करने की आवश्यकता है।Object[]

सौभाग्य से JDK कार्यान्वयन तेज है और Arrays.asList(a[])बहुत अच्छी तरह से किया गया है। यह Arrays.ArrayList नाम का एक प्रकार का ArrayList बनाता है जहाँ ऑब्जेक्ट [] डेटा सरणी के लिए सीधे इंगित करता है।

// in Arrays
@SafeVarargs
public static <T> List<T> asList(T... a) {
    return new ArrayList<>(a);
}
//still in Arrays, creating a private unseen class
private static class ArrayList<E>

    private final E[] a;    
    ArrayList(E[] array) {
        a = array; // you point to the previous array
    }
    ....
}

खतरनाक पक्ष यह है कि यदि आप प्रारंभिक सरणी को बदलते हैं, तो आप सूची को बदलते हैं!क्या आप वाकई ऐसा चाहते हैं? शायद हाँ शायद ना।

यदि नहीं, तो सबसे अधिक समझ में आने वाला तरीका यह है:

ArrayList<Element> list = new ArrayList<Element>(myArray.length); // you know the initial capacity
for (Element element : myArray) {
    list.add(element);
}

या जैसा कि @glglgl ने कहा, आप एक और स्वतंत्र ArrayList बना सकते हैं:

new ArrayList<T>(Arrays.asList(myArray));

मैं उपयोग करने के लिए प्यार करता हूँ Collections, Arraysया अमरूद। लेकिन अगर यह फिट नहीं है, या आप इसे महसूस नहीं करते हैं, तो इसके बजाय सिर्फ एक और अपात्र लाइन लिखिए।


1
मैं उत्तर के अंत में आपके लूप के बीच मूलभूत अंतर और उस new ArrayList<T>(Arrays.asList(myArray));भाग को देखने में विफल रहता हूं जिसे आप उपयोग करने के लिए हतोत्साहित करते हैं। दोनों काफी समान हैं और एक ही जटिलता है।
ग्लोगल

संग्रह एक सरणी की शुरुआत में एक सूचक बनाते हैं। मेरा लूप कई पॉइंटर्स बनाता है: प्रत्येक ऐरे मेंबर के लिए। इसलिए यदि मूल सरणी बदल जाती है, तो मेरे संकेत अभी भी पूर्व मूल्यों की ओर निर्देशित हैं।
निकोलस ज़ोज़ोल

1
new ArrayList<T>(Arrays.asList(myArray));एक ही है, यह एक कॉपी करता asListहै ArrayList...
glglgl

37

में Java 9आप का उपयोग कर सकते हैं:

List<String> list = List.of("Hello", "World", "from", "Java");
List<Integer> list = List.of(1, 2, 3, 4, 5);

ध्यान दें कि यह एक ArrayList नहीं है, क्योंकि यह स्पष्ट रूप से पूछा गया था।
डोरियन ग्रे

33

सवाल के अनुसार जावा 1.7 का उपयोग करने वाला उत्तर है:

ArrayList<Element> arraylist = new ArrayList<Element>(Arrays.<Element>asList(array));

हालांकि यह हमेशा इंटरफ़ेस का उपयोग करना बेहतर होता है:

List<Element> arraylist = Arrays.<Element>asList(array);

30
// Guava
import com.google.common.collect.ListsLists
...
List<String> list = Lists.newArrayList(aStringArray); 

22

आप विभिन्न तरीकों का उपयोग करके परिवर्तित कर सकते हैं

  1. List<Element> list = Arrays.asList(array);

  2. List<Element> list = new ArrayList();
    Collections.addAll(list, array);

  3. Arraylist list = new Arraylist();
    list.addAll(Arrays.asList(array));

अधिक विवरण के लिए आप http://javarevisited.blogspot.in/2011/06/converting-array-to-arraylist-in-java.html देखें


21

जैसा कि सभी ने कहा कि यह ऐसा करेगा

 new ArrayList<>(Arrays.asList("1","2","3","4"));

और सरणी बनाने के लिए सामान्य नवीनतम तरीका अवलोकन योग्य है

ObservableList: एक सूची जो श्रोताओं को होने वाले परिवर्तनों को ट्रैक करने की अनुमति देती है।

जावा एसई के लिए आप कोशिश कर सकते हैं

FXCollections.observableArrayList(new Element(1), new Element(2), new Element(3));

यह Oracle डॉक्स के अनुसार है

observableArrayList () एक नई खाली अवलोकन योग्य सूची बनाता है जो एक सरणी सूची द्वारा समर्थित है। observableArrayList (E ... आइटम) इसमें जोड़े गए आइटमों के साथ एक नई अवलोकन योग्य सरणी सूची बनाता है।

जावा 9 को अपडेट करें

जावा 9 में भी यह थोड़ा आसान है:

List<String> list = List.of("element 1", "element 2", "element 3");


18

आप इसे जावा 8 में स्ट्रीम के साथ भी कर सकते हैं।

 List<Element> elements = Arrays.stream(array).collect(Collectors.toList()); 

3
जावा 8 के रूप में , Collectors.toList()एक वापस आ जाएगी ArrayList। हालाँकि यह java.If पर भविष्य के संस्करणों में भिन्न हो सकता है। यदि आप एक विशिष्ट प्रकार का संग्रह चाहते हैं, तो Collectors.toCollection()इसके बजाय इसका उपयोग करें जहां आप निर्दिष्ट कर सकते हैं कि आप किस प्रकार का संग्रह बनाना चाहते हैं।
राजा अन्बझगन

14
  1. यदि हम Arrays.asList()विधि की परिभाषा देखते हैं तो आपको कुछ इस तरह मिलेगा:

     public static <T> List<T> asList(T... a) //varargs are of T type. 

    तो, आप arraylistइस तरह से आरंभ कर सकते हैं :

     List<Element> arraylist = Arrays.asList(new Element(1), new Element(2), new Element(3));

    नोट : प्रत्येक new Element(int args)को व्यक्तिगत वस्तु के रूप में माना जाएगा और इसे एक के रूप में पारित किया जा सकता है var-args

  2. इस सवाल का एक और जवाब भी हो सकता है।
    यदि आप java.util.Collections.addAll()विधि के लिए घोषणा देखते हैं तो आपको कुछ इस तरह मिलेगा:

    public static <T> boolean addAll(Collection<? super T> c, T... a);

    तो, ऐसा करने के लिए भी यह कोड उपयोगी है

    Collections.addAll(arraylist, array);

10

एक और सरल तरीका यह है कि सभी तत्वों को सरणी से नए ArrayList के लिए प्रत्येक लूप का उपयोग करके जोड़ा जाए।

ArrayList<Element> list = new ArrayList<>();

for(Element e : array)
    list.add(e);

10

यदि सरणी एक आदिम प्रकार की है, तो दिए गए उत्तर काम नहीं करेंगे। लेकिन जावा 8 के बाद से आप उपयोग कर सकते हैं:

int[] array = new int[5];
Arrays.stream(array).boxed().collect(Collectors.toList());

यह समाधान charया तो सरणी के साथ काम नहीं करता है ।
PixelMaster

8

आप इसे 8 जावा में निम्नानुसार कर सकते हैं

ArrayList<Element> list = (ArrayList<Element>)Arrays.stream(array).collect(Collectors.toList());

1
डाउनवोटेड क्योंकि वह कास्ट बहुत खतरनाक लगती है। कुछ भी नहीं निर्दिष्ट करता है कि जिस प्रकार की सूची दी गई है वह वास्तव में एक ArrayList है, जैसा कि जावाडॉक बताता है: "सूची के प्रकार, परिवर्तनशीलता, क्रमबद्धता या थ्रेड-सुरक्षा पर कोई गारंटी नहीं है"
डोरियन ग्रे

1
यदि आप स्पष्ट रूप से एक ArrayList बनाना चाहते हैं, तो यह आज़माएँ:ArrayList<String> list = Arrays.stream(array).collect(Collectors.toCollection(ArrayList::new));
Dorian Grey

8

हम आसानी से एक सरणी को बदल सकते हैं ArrayList। हम addAll()एक सूची से दूसरी सूची में सामग्री की प्रतिलिपि बनाने के उद्देश्य से संग्रह इंटरफ़ेस की विधि का उपयोग करते हैं ।

 Arraylist arr = new Arraylist();
 arr.addAll(Arrays.asList(asset));

यह स्वीकृत 9 वर्ष पुराने उत्तर की तुलना में कम कुशल है।
अजानचर्ल्स

2
में से एक ArrayListरों कंस्ट्रक्टर्स एक को स्वीकार करता है ? extends Collection<T>, तर्क कॉल करने के लिए कर रही है addAllअनावश्यक।
तमोग्ना चौधरी

7

भले ही इस प्रश्न के कई पूरी तरह से लिखित उत्तर हैं, मैं अपने इनपुट जोड़ूंगा।

बोलो तुम्हारे पास है Element[] array = { new Element(1), new Element(2), new Element(3) };

न्यू ArrayList निम्नलिखित तरीकों से बनाया जा सकता है

ArrayList<Element> arraylist_1 = new ArrayList<>(Arrays.asList(array));
ArrayList<Element> arraylist_2 = new ArrayList<>(
    Arrays.asList(new Element[] { new Element(1), new Element(2), new Element(3) }));

// Add through a collection
ArrayList<Element> arraylist_3 = new ArrayList<>();
Collections.addAll(arraylist_3, array);

और वे बहुत अच्छी तरह से ArrayList के सभी कार्यों का समर्थन करते हैं

arraylist_1.add(new Element(4)); // or remove(): Success
arraylist_2.add(new Element(4)); // or remove(): Success
arraylist_3.add(new Element(4)); // or remove(): Success

लेकिन निम्नलिखित ऑपरेशन एक ArrayList की सिर्फ एक सूची दृश्य देता है और वास्तविक ArrayList नहीं।

// Returns a List view of array and not actual ArrayList
List<Element> listView_1 = (List<Element>) Arrays.asList(array);
List<Element> listView_2 = Arrays.asList(array);
List<Element> listView_3 = Arrays.asList(new Element(1), new Element(2), new Element(3));

इसलिए, वे कुछ ArrayList संचालन करने का प्रयास करते समय त्रुटि देंगे

listView_1.add(new Element(4)); // Error
listView_2.add(new Element(4)); // Error
listView_3.add(new Element(4)); // Error

सरणी लिंक की सूची प्रतिनिधित्व पर अधिक ।


7

ऐसा करने का सबसे सरल तरीका निम्नलिखित कोड जोड़कर है। आजमाया और परखा गया।

String[] Array1={"one","two","three"};
ArrayList<String> s1= new ArrayList<String>(Arrays.asList(Array1));

7

एक और Java8 समाधान (मैं बड़े सेट के बीच उत्तर को याद कर सकता हूं। यदि हां, तो मेरी माफी)। यह एक ArrayList बनाता है (एक सूची के विपरीत) अर्थात एक तत्वों को हटा सकता है

package package org.something.util;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class Junk {

    static <T> ArrayList<T>  arrToArrayList(T[] arr){
        return Arrays.asList(arr)
            .stream()
            .collect(Collectors.toCollection(ArrayList::new));
    }

    public static void main(String[] args) {
        String[] sArr = new String[]{"Hello", "cruel", "world"};
        List<String> ret = arrToArrayList(sArr);
        // Verify one can remove an item and print list to verify so
        ret.remove(1);
        ret.stream()
            .forEach(System.out::println);
    }
}

आउटपुट है ...
हैलो
वर्ल्ड


7

एक तत्व सरणी को एक ArrayList में बदलने के लिए निम्न कोड का उपयोग करें।

Element[] array = {new Element(1), new Element(2), new Element(3)};

ArrayList<Element>elementArray=new ArrayList();
for(int i=0;i<array.length;i++) {
    elementArray.add(array[i]);
}

5

आपकी समस्या के लिए पहले से ही सभी ने पर्याप्त अच्छा उत्तर दिया है। अब सभी सुझावों से, आपको निर्णय लेने की आवश्यकता है जो आपकी आवश्यकता के अनुरूप होगा। दो प्रकार के संग्रह हैं जिन्हें आपको जानना आवश्यक है। एक बिना संग्रहित संग्रह और अन्य एक संग्रह है जो आपको बाद में ऑब्जेक्ट को संशोधित करने की अनुमति देगा।

इसलिए, यहां मैं दो उपयोग मामलों के लिए संक्षिप्त उदाहरण दूंगा।

  • अपरिवर्तनीय संग्रह निर्माण :: जब आप निर्माण के बाद संग्रह वस्तु को संशोधित नहीं करना चाहते

    List<Element> elementList = Arrays.asList(array)

  • म्यूचुअल संग्रह निर्माण :: जब आप सृजन के बाद बनाई गई संग्रह वस्तु को संशोधित करना चाहते हैं।

    List<Element> elementList = new ArrayList<Element>(Arrays.asList(array));


सूची <तत्व> एलिमेंटलिस्ट = एरेयस.लिस्ट (सरणी) मूल सरणी पर एक आवरण बनाता है जो सूची के लिए मूल सरणी उपलब्ध करता है। इसलिए एक आवरण वस्तु बनाई जाती है, मूल सरणी से कुछ भी कॉपी नहीं किया जाता है। इसलिए, तत्वों को जोड़ने या हटाने जैसे संचालन की अनुमति नहीं है।
प्रियंका

3
ध्यान दें कि आपका "अपरिवर्तनीय संग्रह" वास्तव में अपरिवर्तनीय नहीं है - Listद्वारा लौटाया गया Arrays.asListमूल सरणी पर सिर्फ एक आवरण है, और व्यक्तिगत वस्तुओं को एक्सेस करने और संशोधित करने की अनुमति देता है getऔर set। आपको शायद स्पष्ट करना चाहिए कि आप "अपरिवर्तनीय" के बजाय "तत्वों को न जोड़ें या हटाएं", जिसका अर्थ है कि बिल्कुल भी नहीं बदलना।
तमोगण चौधरी

5

दिए गए ऑब्जेक्ट सरणी:

Element[] array = {new Element(1), new Element(2), new Element(3) , new Element(2)};

सरणी को सूची में बदलें:

    List<Element> list = Arrays.stream(array).collect(Collectors.toList());

Array को ArrayList में बदलें

    ArrayList<Element> arrayList = Arrays.stream(array)
                                       .collect(Collectors.toCollection(ArrayList::new));

एरियर को लिंक्डलिस्ट में बदलें

    LinkedList<Element> linkedList = Arrays.stream(array)
                     .collect(Collectors.toCollection(LinkedList::new));

प्रिंट सूची:

    list.forEach(element -> {
        System.out.println(element.i);
    });

आउटपुट

1

2

3


4

जावा 8 का एरेस वर्ग एक धारा () विधि प्रदान करता है जिसमें ओवर लोडेड संस्करण होते हैं जो दोनों आदिम सरणियों और ऑब्जेक्ट सरणियों को स्वीकार करते हैं।

/**** Converting a Primitive 'int' Array to List ****/

int intArray[] = {1, 2, 3, 4, 5};

List<Integer> integerList1 = Arrays.stream(intArray).boxed().collect(Collectors.toList());

/**** 'IntStream.of' or 'Arrays.stream' Gives The Same Output ****/

List<Integer> integerList2 = IntStream.of(intArray).boxed().collect(Collectors.toList());

/**** Converting an 'Integer' Array to List ****/

Integer integerArray[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

List<Integer> integerList3 = Arrays.stream(integerArray).collect(Collectors.toList());

3

नीचे कोड ऐसा करने का अच्छा तरीका लगता है।

new ArrayList<T>(Arrays.asList(myArray));
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.