2011-11-01 11 views
80

मैं जानना चाहता हूं कि क्या यह सुरक्षित है/सलाह दी जाती है कि क्या यह ArrayList से Array में परिवर्तित करने के लिए सुरक्षित है? प्रत्येक एक स्ट्रिंग लाइन के साथ मैं एक पाठ फ़ाइल है:Arraylist से Array

1236 
1233 
4566 
4568 
.... 

मैं उन्हें सरणी सूची में पढ़ना चाहते हैं और फिर मैं इसे सरणी में बदलने का। क्या यह सलाह देने योग्य/कानूनी है?

धन्यवाद

+7

आप * कर सकते हैं, लेकिन आपने हमें यह बताने के लिए लगभग पर्याप्त जानकारी नहीं दी है कि यह एक अच्छा विचार है या नहीं। –

+5

ऐरेलिस्ट्स ठीक हैं। एक ऐरे में कनवर्ट करने के लिए मैं देख सकता हूं कि एकमात्र कारण यह है कि यदि आपको ऐसी विधि कॉल करने की आवश्यकता है जिसके लिए इसकी आवश्यकता है। –

उत्तर

162

हाँ it is safe to convert an ArrayList to an Array। चाहे यह एक अच्छा विचार है, आपके इच्छित उपयोग पर निर्भर करता है। क्या आपको उन परिचालनों की आवश्यकता है जो ArrayList प्रदान करता है? यदि ऐसा है, तो इसे ArrayList रखें। अन्यथा दूर कन्वर्ट!

ArrayList<Integer> foo = new ArrayList<Integer>(); 
foo.add(1); 
foo.add(1); 
foo.add(2); 
foo.add(3); 
foo.add(5); 
Integer[] bar = foo.toArray(new Integer[foo.size()]); 
System.out.println("bar.length = " + bar.length); 

आउटपुट

bar.length = 5 
+0

क्या होगा यदि ऐरेलिस्ट खाली है? – ThanosFisherman

+22

फिर यह खाली है। – IMustBeSomeone

4
ArrayList<String> myArrayList = new ArrayList<String>(); 
... 
String[] myArray = myArrayList.toArray(new String[0]); 

यह एक "अच्छा विचार" चाहे वास्तव में आपके उपयोग के मामले पर निर्भर होगा।

String[] x = (String[]) v.toArray(new String[0]); 
+0

धन्यवाद, सिर्फ जानना उत्सुक है: मुझे सरणी आकार घोषित करने की आवश्यकता नहीं है? –

+0

जावाडॉक्स आपके मित्र हैं। यदि सरणी पास हो रही है तो बहुत छोटा है एक नई सरणी लौटा दी जाती है। विधि का कोई अन्य संस्करण जो कोई तर्क नहीं लेता है 'ऑब्जेक्ट' –

2

संभालने वी एक ArrayList है। आपके पास list.get(index);

1
ArrayList<String> a = new ArrayList<String>(); 
a.add("test"); 
@SuppressWarnings("unused") 
String[] array = (String[]) a.toArray(); 

यह आप क्या हासिल करना यदि आप सरणी में हेरफेर करने के बाद यह ArrayList में स्ट्रिंग रखने से ज्यादा प्रयास का खर्च आएगा जरूरत चाहते हैं पर निर्भर करता है:

57

द्वारा एक ArrayList के साथ यादृच्छिक पहुंच भी है यह सबसे अच्छा तरीका है (IMHO)।

List<String> myArrayList = new ArrayList<String>(); 
//..... 
String[] myArray = myArrayList.toArray(new String[myArrayList.size()]); 

इस कोड को भी काम करता है:

String[] myArray = myArrayList.toArray(new String[0]); 

लेकिन यह कम प्रभावी: स्ट्रिंग सरणी दो बार बनाई गई है: पहली बार शून्य लंबाई सरणी, बनाई गई है तो वास्तविक आकार सरणी बनाया जाता है, भरा और लौट आया। इसलिए, यदि आप आवश्यक आकार (list.size() से) जानते हैं तो आपको सरणी बनाना चाहिए जो सभी तत्वों को रखने के लिए काफी बड़ा है। इस मामले में इसे फिर से आवंटित नहीं किया जाता है।

+1

'एआर स्ट्रिंग [0]' और 'नई स्ट्रिंग [आकार]' के बीच अंतर का अच्छा स्पष्टीकरण देता है। – gamliela

0

संग्रह इंटरफ़ेस में एक नया संग्रह एक सरणी में परिवर्तित करने के लिए toArray() विधि शामिल है। इस विधि के दो रूप हैं। कोई तर्क संस्करण किसी ऑब्जेक्ट सरणी में संग्रह के तत्वों को वापस नहीं करेगा: सार्वजनिक ऑब्जेक्ट [] toArray()। लौटा सरणी किसी अन्य डेटा प्रकार पर नहीं डाली जा सकती है। यह सबसे सरल संस्करण है। दूसरे संस्करण के लिए आपको उस सरणी के डेटा प्रकार में प्रवेश करने की आवश्यकता है, जिसे आप वापस करना चाहते हैं: सार्वजनिक ऑब्जेक्ट [] toArray (ऑब्जेक्ट प्रकार [])।

public static void main(String[] args) { 
      List<String> l=new ArrayList<String>(); 
      l.add("A"); 
      l.add("B"); 
      l.add("C"); 
      Object arr[]=l.toArray(); 
      for(Object a:arr) 
      { 
       String str=(String)a; 
       System.out.println(str); 
      } 
     } 

संदर्भ के लिए, इस लिंक http://techno-terminal.blogspot.in/2015/11/how-to-obtain-array-from-arraylist.html

0

एक दृष्टिकोण लूप जहां मुद्रण पाश के लिए पहले के अंदर किया जा रहा है के लिए दूसरा जोड़ने के लिए किया जाएगा देखें। इस तरह:

static String[] SENTENCE; 

public static void main(String []args) throws Exception{ 

    Scanner sentence = new Scanner(new File("assets/blah.txt")); 
    ArrayList<String> sentenceList = new ArrayList<String>(); 

    while (sentence.hasNextLine()) 
    { 
     sentenceList.add(sentence.nextLine()); 
    } 

    sentence.close(); 

    String[] sentenceArray = sentenceList.toArray(new String[sentenceList.size()]); 
    // System.out.println(sentenceArray.length); 
    for (int r=0;r<sentenceArray.length;r++) 
    { 
     SENTENCE = sentenceArray[r].split("(?<=[.!?])\\s*"); //split sentences and store in array 

     for (int i=0;i<SENTENCE.length;i++) 
     { 
      System.out.println("Sentence " + (i+1) + ": " + SENTENCE[i]); 
     } 
    }  

}