অ্যারে.এএসলিস্ট (অ্যারে) এবং নতুন অ্যারেলিস্ট <ইন্টেজার> (অ্যারে.এএসলিস্ট (অ্যারে)) এর মধ্যে পার্থক্য


118

পার্থক্য কি

1.List<Integer> list1 = new ArrayList<Integer>(Arrays.asList(ia));  //copy
2.List<Integer> list2 = Arrays.asList(ia);

iaপূর্ণসংখ্যার অ্যারে যেখানে

আমি জানতে পেরেছিলাম যে কিছু অপারেশনগুলিতে প্রবেশের অনুমতি নেই list2। এটা এমন কেন? এটি মেমোরিতে কীভাবে সংরক্ষণ করা হয় (তথ্যসূত্র / অনুলিপি)?

আমি তালিকাগুলি list1বদলে গেলে মূল অ্যারেটিকে প্রভাবিত করে না তবে list2করে। তবে এখনও list2কিছুটা বিভ্রান্তিকর।

কীভাবে ArrayListতালিকাতে আপকাস্ট করা হচ্ছে তা নতুন তৈরির থেকে পৃথকArrayList

list1 differs from (1)
ArrayList<Integer> list1 = new ArrayList<Integer>(Arrays.asList(ia));

2
আমি আপনাকে গুগল পেয়ারার বিকল্পটি দেখাশোনা করার পরামর্শ দিচ্ছি । Lists.newArrayList(ia)প্রথম বিকল্প হিসাবে ঠিক একটি স্বতন্ত্র অনুলিপি তৈরি করে। এটি দেখতে আরও সাধারণ এবং আরও ভাল।
কিউবেন 20'14

উত্তর:


228
  1. প্রথমে দেখা যাক এটি কী করে:

    Arrays.asList(ia)

    এটি একটি অ্যারে নেয় iaএবং একটি মোড়ক তৈরি করে List<Integer>যা প্রয়োগ করে যা মূল অ্যারেটিকে তালিকা হিসাবে উপলব্ধ করে। কিছুই অনুলিপি করা হয় না এবং সব কিছু, শুধুমাত্র একটি একক মোড়ক বস্তু তৈরি করা হয়। তালিকার মোড়কের অপারেশনগুলি মূল অ্যারেতে প্রচারিত হয়। এর অর্থ এই যে যদি আপনি তালিকার মোড়কের এলোমেলো, মূল অ্যারের পাশাপাশি এলোমেলো হয়, যদি আপনি একটি উপাদান ওভাররাইট, এটি উপরিলিখিত মূল অ্যারের, ইত্যাদি অবশ্যই, কিছু পায় Listঅপারেশন, মোড়কের এ অনুমোদিত নয় যোগ করে অথবা মত তালিকা থেকে উপাদানগুলি সরিয়ে, আপনি কেবল উপাদানগুলি পড়তে বা ওভাররাইট করতে পারেন।

    নোট করুন যে তালিকার মোড়ক প্রসারিত হয় না ArrayList- এটি ভিন্ন ধরণের অবজেক্ট। ArrayListএর নিজস্ব নিজস্ব, অভ্যন্তরীণ অ্যারে রয়েছে, যাতে তারা তাদের উপাদানগুলি সংরক্ষণ করে এবং অভ্যন্তরীণ অ্যারেগুলি পুনরায় আকার দিতে সক্ষম হয় The র‌্যাপারের নিজস্ব অভ্যন্তরীণ অ্যারে নেই, এটি কেবল এটি প্রদত্ত অ্যারেটিতে ক্রিয়াকলাপ প্রচার করে।

  2. অন্যদিকে, আপনি যদি পরে একটি নতুন অ্যারে তৈরি করেন

    new ArrayList<Integer>(Arrays.asList(ia))

    তারপরে আপনি নতুন তৈরি করুন ArrayListযা মূলটির সম্পূর্ণ, স্বতন্ত্র অনুলিপি। যদিও এখানে আপনি Arrays.asListপাশাপাশি ব্যবহার করে মোড়ক তৈরি করেন , এটি কেবলমাত্র নতুন নির্মাণের সময় ব্যবহৃত হয় ArrayListএবং পরে আবর্জনা সংগ্রহ করা হয়। এই নতুনটির গঠনটি ArrayListমূল অ্যারে থেকে সম্পূর্ণ স্বতন্ত্র। এটিতে একই উপাদান রয়েছে (মূল অ্যারে এবং এই নতুন ArrayListরেফারেন্স দুটিই মেমরিতে একই পূর্ণসংখ্যার), তবে এটি একটি নতুন, অভ্যন্তরীণ অ্যারে তৈরি করে, যা রেফারেন্সগুলি ধারণ করে। সুতরাং আপনি যখন এটিকে বদলে যান, যোগ করুন, উপাদানগুলি মুছুন ইত্যাদি, আসল অ্যারেটি অপরিবর্তিত থাকে।


9
@ দিনেশকুমার একটি মোড়ক একটি নকশার প্যাটার্ন যা একটি শ্রেণীর জন্য একটি ইন্টারফেসকে অন্য ইন্টারফেসে অনুবাদ করে। দেখুন মোড়কের প্যাটার্ন নিবন্ধ। | কোথায় আপনি উজান করা প্রয়োজন? আমি List<Integer>আপনার পরিবর্তনশীল ধরণের (বা পদ্ধতি আর্গুমেন্ট ইত্যাদি) জন্য ব্যবহার করার পরামর্শ দেব । এটি আপনার কোডটিকে আরও জেনেরিক করে তোলে এবং আপনি Listপ্রচুর কোড পুনরায় লেখার প্রয়োজন ছাড়াই প্রয়োজন অনুসারে সহজেই অন্য প্রয়োগায় চলে যেতে পারেন ।
পেটর পুদলক

এটি একটি ভাল ব্যাখ্যা। এই প্রশ্নটি প্রসারিত করে, অ্যারে.এএসলিস্ট () পদ্ধতিটিও ভ্যারাগস গ্রহণ করে। যদি আমি নির্দিষ্ট মানগুলি পাস করি তবে আমি বলি: অ্যারেএস.এললিস্ট (1,3,5) দুবার, এটি কি একই তালিকাটি ফেরত দেবে?
sbsatter

27

ঠিক আছে কারণ ArrayListফলাফলটি Arrays.asList()ধরণের নয় java.util.ArrayListArrays.asList()এমন ArrayListএক ধরণের তৈরি java.util.Arrays$ArrayListকরে যা প্রসারিত না করে java.util.ArrayListকেবল প্রসারিত হয়java.util.AbstractList


9
List<Integer> list1 = new ArrayList<Integer>(Arrays.asList(ia));  //copy

এই ক্ষেত্রে, list1টাইপ হয় ArrayList

List<Integer> list2 = Arrays.asList(ia);

এখানে তালিকাটি Listভিউ হিসাবে ফিরিয়ে দেওয়া হয়েছে , যার অর্থ এটি কেবলমাত্র সেই ইন্টারফেসের সাথে যুক্ত পদ্ধতি রয়েছে। সুতরাং কেন কিছু পদ্ধতি ব্যবহারের অনুমতি নেই list2

ArrayList<Integer> list1 = new ArrayList<Integer>(Arrays.asList(ia));

এখানে, আপনি একটি নতুন তৈরি করছেন ArrayList। আপনি কেবল এটি নির্মাণকারীর মধ্যে একটি মান পাস করছেন। এটি কাস্টিংয়ের উদাহরণ নয়। কাস্টিংয়ে, এটি আরও দেখতে এরকম হতে পারে:

ArrayList list1 = (ArrayList)Arrays.asList(ia);

4

আমি এখানে বেশ দেরিতে এসেছি, যাই হোক ডক রেফারেন্স সহ ব্যাখ্যাটি উত্তর খুঁজছেন এমন ব্যক্তির পক্ষে আরও ভাল।

  1. java.util.Arrays
  • এটি প্রদত্ত অ্যারেতে পরিচালনা করার জন্য গুচ্ছ স্থির পদ্ধতি সহ একটি ইউটিলিটি শ্রেণি
  • asList হ'ল এমন একটি স্থিতিশীল পদ্ধতি যা ইনপুট অ্যারে নেয় এবং java.util.Arrays.ArrayList এর একটি অবজেক্ট দেয় যা একটি স্ট্যাটিক নেস্টেড ক্লাস যা অ্যাবস্ট্রাকলিস্টকে প্রসারিত করে যা অন্তর্নিহিত তালিকা ইন্টারফেস প্রয়োগ করে।
  • সুতরাং অ্যারেজ.এললিস্ট (ইনারি) ইনপুট অ্যারের চারপাশে একটি তালিকা মোড়ক দেয় কিন্তু এই মোড়কটি java.util.Arrays.ArrayList এবং java.util.ArrayList নয় এবং এটি একই অ্যারেটিকে বোঝায় সুতরাং মোড়কযুক্ত অ্যারে তালিকায় আরও উপাদান যুক্ত করা প্রভাবিত করবে একটি খুব অরিগেনাল এবং এছাড়াও আমরা দৈর্ঘ্য পরিবর্তন করতে পারবেন না।
  1. java.util.ArrayList
  • অ্যারেলিস্টে ওভারলোডেড কনস্ট্রাক্টরের গুচ্ছ রয়েছে

    সর্বজনীন অ্যারেলিস্ট () - // ডিফল্ট ক্ষমতা সহ অ্যারেলিস্ট 10 প্রদান করে

    পাবলিক অ্যারেলিস্ট (সংগ্রহ সি)

    সার্বজনীন অ্যারেলিস্ট (প্রারম্ভিক ক্ষমতা)

  • সুতরাং যখন আমরা অ্যারেজ.এললিস্টের প্রত্যাবর্তিত বস্তু অর্থাৎ তালিকার (অ্যাবস্ট্রাকলিস্ট) উপরের দ্বিতীয় নির্মাণকারীর কাছে যাব তখন এটি একটি নতুন গতিশীল অ্যারে তৈরি করবে (এই অ্যারের আকারটি বৃদ্ধি পাবে কারণ আমরা এর ক্ষমতার চেয়ে আরও বেশি উপাদান যুক্ত করব এবং নতুন উপাদানগুলিও অরিগনাল অ্যারেকে প্রভাবিত করবে না) ) অল্প অরিজিনাল মূল অ্যারের অনুলিপি করা ( অগভীর অনুলিপি মানে এটি কেবলমাত্র রেফারেন্সের উপর অনুলিপি করে এবং অরিনগাল অ্যারের মতো একই বস্তুর একটি নতুন সেট তৈরি করে না)


4
String names[] = new String[]{"Avinash","Amol","John","Peter"};
java.util.List<String> namesList = Arrays.asList(names);

অথবা

String names[] = new String[]{"Avinash","Amol","John","Peter"};
java.util.List<String> temp = Arrays.asList(names);         

উপরে বিবৃতি ইনপুট অ্যারেতে মোড়ক যুক্ত করে। সুতরাং অ্যাড ও রিমুভের মতো পদ্ধতিগুলি তালিকা রেফারেন্স অবজেক্ট 'নেমলিস্ট' তে প্রযোজ্য হবে না।

আপনি যদি বিদ্যমান অ্যারে / তালিকায় কোনও উপাদান যুক্ত করার চেষ্টা করেন তবে আপনি "থ্রেডে ব্যতিক্রম" মূল "java.lang.UnsupportedOperationException" পাবেন।

উপরের অপারেশনটি কেবলমাত্র পাঠ্য বা দর্শনযোগ্য।
আমরা তালিকা অবজেক্টে অপারেশন যোগ বা অপসারণ করতে পারি না। কিন্তু

String names[] = new String[]{"Avinash","Amol","John","Peter"};
java.util.ArrayList<String> list1 = new ArrayList<>(Arrays.asList(names));

অথবা

String names[] = new String[]{"Avinash","Amol","John","Peter"};
java.util.List<String> listObject = Arrays.asList(names);
java.util.ArrayList<String> list1 = new ArrayList<>(listObject);

উপরের বিবৃতিতে আপনি একটি অ্যারেলিস্ট শ্রেণীর একটি কংক্রিট উদাহরণ তৈরি করেছেন এবং পরামিতি হিসাবে একটি তালিকা পাস করেছেন।

এই ক্ষেত্রে পদ্ধতিতে অ্যাড ও রিমুভ সঠিকভাবে কাজ করবে কারণ উভয় পদ্ধতি অ্যারেলিস্ট শ্রেণীর থেকে তাই এখানে আমরা কোনও অসমর্থিত অপারেশন এক্সেক্সশন পাব না।
অ্যারেলিস্ট অবজেক্টে করা পরিবর্তনগুলি (পদ্ধতিটি একটি অ্যারেলিস্টে / থেকে একটি উপাদান জুড়ুন বা সরান) মূল জাভা.ইটিল.লিস্ট অবজেক্টে প্রতিফলিত হবে না।

String names[] = new String[] {
    "Avinash",
    "Amol",
    "John",
    "Peter"
};

java.util.List < String > listObject = Arrays.asList(names);
java.util.ArrayList < String > list1 = new ArrayList < > (listObject);
for (String string: list1) {
    System.out.print("   " + string);
}
list1.add("Alex"); //Added without any exception
list1.remove("Avinash"); //Added without any exception will not make any changes in original list in this case temp object.


for (String string: list1) {
    System.out.print("   " + string);
}
String existingNames[] = new String[] {
    "Avinash",
    "Amol",
    "John",
    "Peter"
};
java.util.List < String > namesList = Arrays.asList(names);
namesList.add("Bob"); // UnsupportedOperationException occur
namesList.remove("Avinash"); //UnsupportedOperationException

3

সবার আগে অ্যারে ক্লাসটি একটি ইউটিলিটি ক্লাস যা কোনটি নেই। অ্যারেতে পরিচালিত ইউটিলিটি পদ্ধতির (অ্যারে ক্লাসের জন্য ধন্যবাদ অন্যথায় অ্যারে অবজেক্টগুলিতে কাজ করার জন্য আমাদের নিজস্ব পদ্ধতি তৈরি করতে হবে)

asList () পদ্ধতি:

  1. asListপদ্ধতিটি Arrayক্লাসের অন্যতম উপযোগী পদ্ধতি , এটি স্থির পদ্ধতি যা আমরা এই পদ্ধতিটিকে শ্রেণীর নাম দ্বারা কেন পছন্দ করতে পারি (যেমন Arrays.asList(T...a))
  2. এখন এখানে টুইস্টটি রয়েছে, দয়া করে নোট করুন যে এই পদ্ধতিটি নতুন ArrayListঅবজেক্টটি তৈরি করে না , এটি কেবল বিদ্যমান Arrayঅবজেক্টের জন্য একটি তালিকা রেফারেন্স দেয় (সুতরাং এখন asListপদ্ধতিটি ব্যবহারের পরে , বিদ্যমান Arrayঅবজেক্টের জন্য দুটি রেফারেন্স তৈরি হবে)
  3. এবং এই কারণেই, সমস্ত পদ্ধতি যা Listঅবজেক্টে কাজ করে, Listরেফারেন্স ব্যবহার করে এই অ্যারে অবজেক্টটিতে কাজ করতে পারে না উদাহরণস্বরূপ, Arrays আকার দৈর্ঘ্য স্থির করা হয়েছে, সুতরাং আপনি স্পষ্টতই Arrayএই Listরেফারেন্সটি ব্যবহার করে অবজেক্ট থেকে উপাদানগুলি যুক্ত বা অপসারণ করতে পারবেন না (যেমন list.add(10)বা list.remove(10);অন্যথায় এটি অসমর্থিত অপারেশন এক্সেক্সশনটি ফেলে দেবে)
  4. তালিকার রেফারেন্স ব্যবহার করে আপনি যে কোনও পরিবর্তন করছেন তা বের হওয়া Arrayঅবজেক্টে প্রতিফলিত হবে (আপনি যেমন তালিকা রেফারেন্স ব্যবহার করে বিদ্যমান অ্যারে অবজেক্টটিতে কাজ করছেন)

প্রথম ক্ষেত্রে আপনি একটি নতুন Arraylistঅবজেক্ট তৈরি করছেন (২ য় ক্ষেত্রে কেবল বিদ্যমান অ্যারে অবজেক্টের জন্য রেফারেন্স তৈরি করা হয়েছে তবে একটি নতুন ArrayListঅবজেক্ট নয়), সুতরাং এখন দুটি ভিন্ন ভিন্ন বস্তু রয়েছে একটি হ'ল Arrayঅবজেক্ট এবং অন্যটি ArrayListঅবজেক্ট এবং তাদের মধ্যে কোনও সংযোগ নেই (সুতরাং পরিবর্তন হয়) একটি বস্তুতে অন্য বস্তুর প্রতিফলিত / প্রভাবিত হবে না (এটি ক্ষেত্রে 2 Arrayএবং Arraylistদুটি পৃথক বস্তু)

মামলা 1:

Integer [] ia = {1,2,3,4};
System.out.println("Array : "+Arrays.toString(ia));
List<Integer> list1 = new ArrayList<Integer>(Arrays.asList(ia));  // new ArrayList object is created , no connection between existing Array Object
list1.add(5);
list1.add(6);
list1.remove(0);
list1.remove(0);
System.out.println("list1 : "+list1);
System.out.println("Array : "+Arrays.toString(ia));

কেস 2:

Integer [] ia = {1,2,3,4};
System.out.println("Array : "+Arrays.toString(ia));
List<Integer> list2 = Arrays.asList(ia); // creates only a (new ) List reference to existing Array object (and NOT a new ArrayList Object)
//  list2.add(5); //  it will throw java.lang.UnsupportedOperationException - invalid operation (as Array size is fixed)
list2.set(0,10);  // making changes in existing Array object using List reference - valid 
list2.set(1,11); 
ia[2]=12;     // making changes in existing Array object using Array reference - valid
System.out.println("list2 : "+list2);
System.out.println("Array : "+Arrays.toString(ia));

3

অনেক লোক ইতিমধ্যে যান্ত্রিক বিশদটির উত্তর দিয়েছেন, তবে এটি লক্ষণীয়: এটি জাভা দ্বারা ডিজাইন পছন্দ নয়।

জাভা asListপদ্ধতিটি "একটি নির্দিষ্ট আকারের তালিকা ফেরত দেয় ..." হিসাবে নথিভুক্ত করা হয় । আপনি যদি এর ফলাফলটি গ্রহণ করেন এবং .addপদ্ধতিটি (বলুন) কল করেন তবে এটি একটি ছুড়ে দেয় UnsupportedOperationException। এটাই অনর্থক আচরণ! যদি কোনও পদ্ধতি বলে যে এটি প্রত্যাবর্তন করে List, মান প্রত্যাশাটি হ'ল এটি এমন কোনও বস্তু ফেরত দেয় যা ইন্টারফেসের পদ্ধতিগুলিকে সমর্থন করে List। কোনও বিকাশকারীকে মুখোমুখি হওয়া উচিত নয় যে উচ্চারিত পদ্ধতিগুলির মধ্যে কোনটি তৈরি করে যা আসলে সমস্ত পদ্ধতি সমর্থন করে না ।util.ListListList

তারা যদি পদ্ধতিটির নাম দিয়ে asImmutableListথাকে তবে তা বোধগম্য হবে। অথবা যদি তাদের কেবলমাত্র পদ্ধতিটি একটি আসল প্রত্যাবর্তন করে List(এবং ব্যাকিং অ্যারেটি অনুলিপি করে), তা বোঝা যাবে। তারা রানটাইম-পারফরম্যান্স এবং সংক্ষিপ্ত নাম উভয়কেই সমর্থন করার সিদ্ধান্ত নিয়েছে , ন্যূনতম আশ্চর্যের মূলনীতি এবং এসকে এড়ানোর ভাল-ও অনুশীলন উভয়কেই লঙ্ঘন করে UnsupportedOperationException

(এছাড়াও, ডিজাইনাররা এর interface ImmutableListআধিক্য এড়াতে একটি তৈরি করে থাকতে পারে UnsupportedOperationException))


2

নোট করুন যে, জাভা 8-তে, 'ia' অবশ্যই পূর্ণসংখ্যার [] এবং ইন্টের [] নয়। কোন int অ্যারের অ্যারে.এএসলিস্ট () একক উপাদান সহ একটি তালিকা দেয়। ওপি-র কোড স্নিপেট ব্যবহার করার সময়, সংকলকটি সমস্যাটি ধরবে, তবে কিছু পদ্ধতি (যেমন কালেকশনস.শ্যাফেল ()) আপনি যা প্রত্যাশা করছেন তা নিঃশব্দে ব্যর্থ হবে।


1
আমি এই সংকলক ইস্যুটির মুখোমুখি হয়েছিলাম যখন আমি অ্যারেলিস্ট <Integer> al = নতুন অ্যারেলিস্ট <Integer> (অ্যারে.এএসলিস্ট (ক)) করেছি; যেখানে একটি অন্তর্মুখী ছিল []। আমার আলটি কেবলমাত্র একক উপাদান পেয়েছে যখন মুদ্রিত আবর্জনা দেখায়। সেই উপাদানটি কী? এবং কীভাবে সেখানে আসবে? আমি জাভাতে এই সমস্যার মুখোমুখি হয়েছিলাম 7
জ্যোত্সান নন্দওয়ানি

: @JyotsanaNandwani না pls পরীক্ষা আমার উত্তর stackoverflow.com/a/54105519/1163607
অগারাম

1
package com.copy;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;

public class CopyArray {

    public static void main(String[] args) {
        List<Integer> list1, list2 = null;
        Integer[] intarr = { 3, 4, 2, 1 };
        list1 = new ArrayList<Integer>(Arrays.asList(intarr));
        list1.add(30);
        list2 = Arrays.asList(intarr);
        // list2.add(40); Here, we can't modify the existing list,because it's a wrapper
        System.out.println("List1");
        Iterator<Integer> itr1 = list1.iterator();
        while (itr1.hasNext()) {
            System.out.println(itr1.next());
        }
        System.out.println("List2");
        Iterator<Integer> itr2 = list2.iterator();
        while (itr2.hasNext()) {
            System.out.println(itr2.next());
        }
    }
}

1

Arrays.asList()

এই পদ্ধতিটি তালিকার নিজের প্রয়োগ বাস্তবায়িত করে I এটি একটি অ্যারেরকে একটি আর্গুমেন্ট হিসাবে গ্রহণ করে এবং এর উপরে পদ্ধতিগুলি এবং বৈশিষ্ট্যগুলি তৈরি করে, যেহেতু এটি কোনও অ্যারে থেকে কোনও ডেটা অনুলিপি করে না তবে মূল অ্যারে ব্যবহার করে এটি আপনি যখন পরিবর্তন করেন তখন মূল অ্যারেটিতে পরিবর্তনের কারণ হয় তালিকা Arrays.asList()পদ্ধতি দ্বারা ফিরে ।

অন্য দিকে.
ArrayList(Arrays.asList()); একটি কন্সট্রাকটর হয় ArrayListযা আর্গুমেন্ট হিসাবে একটি তালিকা নেয় এবং একটি ফেরৎ বর্গ ArrayListতালিকা অর্থাত স্বাধীন হয়। Arrays.asList()এই ক্ষেত্রে একটি যুক্তি হিসাবে পাস। এজন্য আপনি এই ফলাফলগুলি দেখতে পান;


0
1.List<Integer> list1 = new ArrayList<Integer>(Arrays.asList(ia));  //copy
2.List<Integer> list2 = Arrays.asList(ia);

লাইন 2-এ, এর মধ্যে সংজ্ঞায়িত অভ্যন্তর শ্রেণীর অবজেক্টের Arrays.asList(ia)একটি Listরেফারেন্স প্রদান করে Arrays, যাকে বলা হয় ArrayListতবে এটি ব্যক্তিগত এবং কেবল প্রসারিত AbstractList। এর অর্থ যা থেকে ফিরে এসেছে Arrays.asList(ia)তা কোনও শ্রেণীর অবজেক্ট যা আপনি পান তার থেকে আলাদা new ArrayList<Integer>

আপনি 2 লাইনে কিছু ক্রিয়াকলাপ ব্যবহার করতে পারবেন না কারণ অভ্যন্তরীণ ব্যক্তিগত শ্রেণিটি Arraysএই পদ্ধতিগুলি সরবরাহ করে না।

এই লিঙ্কটি একবার দেখুন এবং দেখুন বেসরকারী অভ্যন্তর শ্রেণীর সাথে আপনি কী করতে পারেন: http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/util/ Arrays.java # Arrays.ArrayList

লাইন 1 একটি নতুন সৃষ্টি ArrayListআপনি এখন আপনি যাহা চান যেহেতু করতে পারি না লাইন 2. থেকে কি পেতে থেকে উপাদানগুলি অনুলিপি বস্তু java.util.ArrayListঐ সমস্ত পদ্ধতি প্রদান করে।


0

পার্থক্যের সংক্ষিপ্তসার -

যখন নতুন অপারেটর অ্যারেএস.এললিস্ট () পদ্ধতি ব্যবহার না করেই তালিকা তৈরি করা হয় তখন এটি র‍্যাপারকে ফেরত দেয় যার অর্থ

1. আপনি অ্যাড / আপডেট অপারেশন করতে পারেন।

২. মূল অ্যারেতে করা পরিবর্তনগুলি তালিকাতে এবং বিপরীতে প্রতিফলিত হবে।


0

জাভা 8 এর পর থেকে অ্যারেএস.এললিস্ট () এর আচরণ সম্পর্কে প্রশ্ন জিজ্ঞাসা করে কিছু মন্তব্যের জবাবে :

    int[] arr1 = {1,2,3};
    /* 
       Arrays are objects in Java, internally int[] will be represented by 
       an Integer Array object which when printed on console shall output
       a pattern such as 
       [I@address for 1-dim int array,
       [[I@address for 2-dim int array, 
       [[F@address for 2-dim float array etc. 
   */
    System.out.println(Arrays.asList(arr1)); 

    /* 
       The line below results in Compile time error as Arrays.asList(int[] array)
       returns List<int[]>. The returned list contains only one element 
       and that is the int[] {1,2,3} 
    */
    // List<Integer> list1 = Arrays.asList(arr1);

    /* 
       Arrays.asList(arr1) is  Arrays$ArrayList object whose only element is int[] array
       so the line below prints [[I@...], where [I@... is the array object.
    */
    System.out.println(Arrays.asList(arr1)); 

    /* 
     This prints [I@..., the actual array object stored as single element 
     in the Arrays$ArrayList object. 
    */
    System.out.println(Arrays.asList(arr1).get(0));

    // prints the contents of array [1,2,3]
    System.out.println(Arrays.toString(Arrays.asList(arr1).get(0)));

    Integer[] arr2 = {1,2,3};
    /* 
     Arrays.asList(arr) is  Arrays$ArrayList object which is 
     a wrapper list object containing three elements 1,2,3.
     Technically, it is pointing to the original Integer[] array 
    */
    List<Integer> list2 = Arrays.asList(arr2);

    // prints the contents of list [1,2,3]
    System.out.println(list2);
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.