অ্যারেলিস্ট থেকে অ্যারে


111

আমি জানতে চাই যে অ্যারেলিস্ট থেকে অ্যারেতে রূপান্তর করা কি নিরাপদ / পরামর্শদাতা? আমার কাছে প্রতিটি লাইনের একটি স্ট্রিংয়ের সাথে একটি পাঠ্য ফাইল রয়েছে:

1236
1233
4566
4568
....

আমি সেগুলি অ্যারে তালিকায় পড়তে চাই এবং তারপরে আমি এটিকে অ্যারে রূপান্তর করি। এটা কি পরামর্শ / আইনী?

ধন্যবাদ


8
আপনি এটি করতে পারেন , তবে এটি একটি ভাল ধারণা কিনা তা আপনি জানানোর জন্য আপনি আমাদের যথেষ্ট পরিমাণ তথ্য দেননি।
জন স্কিটি

6
অ্যারেলিস্টস ভাল আছে। আরেতে রূপান্তর করার জন্য আমি দেখতে পাচ্ছি কেবলমাত্র যদি আপনার কোনও পদ্ধতির প্রয়োজন হয় যা এটির প্রয়োজন হয়।
মাইক জোন্স

উত্তর:


214

হ্যাঁ এটি একটি রূপান্তর করতে নিরাপদ ArrayListএকটি থেকে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

অ্যারেলিস্ট খালি থাকলে কী হবে?
থানোস ফিশারম্যান

48
তারপর এটি খালি।
IMustBeSomeone

1
The method toArray(T[]) in the type ArrayList<Character> is not applicable for the arguments (char[])
অ্যারন ফ্র্যাঙ্ক

75

এটি সেরা উপায় (আইএমএইচও)।

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

এই কোডটিও কাজ করে:

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

তবে এটি কম কার্যকর: স্ট্রিং অ্যারে দু'বার তৈরি হয়: প্রথমবার শূন্য-দৈর্ঘ্যের অ্যারে তৈরি হয়, তারপরে আসল-আকারের অ্যারে তৈরি হয়, পূর্ণ হয় এবং ফিরে আসে। সুতরাং, যেহেতু আপনি প্রয়োজনীয় আকারটি (থেকে list.size()) জানেন তবে আপনার এমন অ্যারে তৈরি করা উচিত যা সমস্ত উপাদান রাখার পক্ষে যথেষ্ট বড়। এক্ষেত্রে এটি পুনরায় বরাদ্দ দেওয়া হয় না।


4
এর মধ্যে পার্থক্য সম্পর্কে ভাল ব্যাখ্যা new String[0]এবংnew String[size]
গামিলিলে

4
new String[0]আসলে আরও দক্ষ। শিপিলিভ.নেট
ব্লগ/

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

এটি "ভাল ধারণা" সত্যই আপনার ব্যবহারের ক্ষেত্রে নির্ভর করবে।


ধন্যবাদ, শুধু জানতে আগ্রহী: আমাকে অ্যারের আকারটি প্রকাশ করার দরকার নেই?
এডি ফ্রিম্যান

জাভাডোকস আপনার বন্ধু। অ্যারেটি খুব ছোট হলে একটি নতুন অ্যারে ফিরে আসে is কোনও আরোগুলি নিচ্ছে না এমন পদ্ধতির অন্যান্য সংস্করণটি অ্যারে প্রদান করেObject
ব্রায়ান রোচ


1

একটি সংগ্রহকে অ্যারেতে রূপান্তর করতে দুটি স্টাইল রয়েছে: হয় প্রাক-আকারের অ্যারে (পছন্দ c.toArray(new String[c.size()])) ব্যবহার করা বা খালি অ্যারে ব্যবহার করা (যেমন c.toArray(new String[0]))। পুরানো জাভা সংস্করণগুলিতে প্রাক-আকারের অ্যারে ব্যবহার করার পরামর্শ দেওয়া হয়েছিল, কারণ সঠিক আকারের অ্যারে তৈরি করতে প্রয়োজনীয় প্রতিচ্ছবি কলটি বেশ ধীর ছিল। তবে ওপেনজেডকে of এর দেরি আপডেট হওয়ার পরে , পূর্ব-আকারের সংস্করণটির তুলনায় খালি অ্যারের সংস্করণটির কার্যকারিতা একই এবং কখনও কখনও আরও ভাল হয়ে ওঠার ফলে এই কলটি অন্তর্ভুক্ত হয়েছিল। প্রাক-আকারের অ্যারে পাস করা সমবর্তী বা সিঙ্ক্রোনাইজড সংগ্রহের জন্য বিপজ্জনক কারণ আকার এবং টু অ্যারে কলের মধ্যে একটি ডেটা রেস সম্ভব হয় যার ফলে অ্যারেটির শেষে অতিরিক্ত শূন্য হতে পারে, যদি সংগ্রহটি ক্রিয়াকলাপের সময় সংকুচিতভাবে সঙ্কুচিত হয়। আপনি অভিন্ন শৈলী অনুসরণ করতে পারেন:হয় খালি অ্যারে (যা আধুনিক জাভাতে প্রস্তাবিত) বা প্রাক-আকারের অ্যারে (যা পুরানো জাভা সংস্করণে বা নন-হটস্পট ভিত্তিক জেভিএমগুলিতে দ্রুত হতে পারে) ব্যবহার করে


1

এটি নতুন জাভা (> জাভা 6) এর জন্য প্রস্তাবিত ব্যবহার is

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

পুরানো জাভা সংস্করণগুলিতে প্রাক-আকারের অ্যারে ব্যবহার করার পরামর্শ দেওয়া হয়েছিল, কারণ সঠিক আকারের অ্যারে তৈরি করতে প্রয়োজনীয় প্রতিচ্ছবি কলটি বেশ ধীর ছিল। তবে ওপেনজেডকে late এর দেরি আপডেট হওয়ার পরে, পূর্ব-আকারের সংস্করণটির তুলনায় খালি অ্যারের সংস্করণটির কার্যকারিতা একই এবং কখনও কখনও আরও ভাল হয়ে ওঠার ফলে এই কলটি অন্তর্ভুক্ত হয়েছিল। প্রাক-আকারের অ্যারে পাস করা সমবর্তী বা সিঙ্ক্রোনাইজড সংগ্রহের জন্য বিপজ্জনক কারণ আকার এবং টু অ্যারে কলের মধ্যে একটি ডেটা রেস সম্ভব হয় যার ফলে অ্যারেটির শেষে অতিরিক্ত শূন্য হতে পারে, যদি সংগ্রহটি ক্রিয়াকলাপের সময় সংকুচিতভাবে সঙ্কুচিত হয়। এই পরিদর্শনটি অভিন্ন শৈলী অনুসরণ করতে অনুমতি দেয়: হয় খালি অ্যারে (যা আধুনিক জাভাতে প্রস্তাবিত) বা প্রাক-আকারের অ্যারে (যা পুরানো জাভা সংস্করণে বা নন-হটস্পট ভিত্তিক জেভিএম দ্রুততর হতে পারে) ব্যবহার করে।


0

কালেকশন ইন্টারফেসটিতে একটি নতুন সংগ্রহকে অ্যারেতে রূপান্তর করতে 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]);
       }
   }    

}

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

এটি পরে অর্জন করতে চাইলে আপনি কী অর্জন করতে চান তার উপর নির্ভর করে যদি অ্যারেলিস্টে স্ট্রিংটি রাখার চেয়ে বেশি প্রচেষ্টা করতে হয় cost আপনার দ্বারা অ্যারেলিস্টের সাথে এলোমেলো অ্যাক্সেসও রয়েছেlist.get( index );

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.