জাভাতে সমস্ত শূন্যের সাথে আমি কীভাবে অ্যারেলিস্ট শুরু করতে পারি?


161

দেখে মনে হচ্ছে arraylistএটি চাপ দেওয়ার জন্য এটি কাজ করছে না:

// presizing 

ArrayList<Integer> list = new ArrayList<Integer>(60);

এর পরে যখন আমি এটি অ্যাক্সেস করার চেষ্টা করি:

list.get(5) 

0 ফেরতের পরিবর্তে এটি সূচকটি ছুঁড়ে ফেলেছে আউটবাউন্ডসেক্সপশন: সূচী 5 দৈর্ঘ্যের সীমার বাইরে

C ++ যা করে তার মতো সঠিক আকারের সমস্ত উপাদানকে 0 থেকে শুরু করার কোনও উপায় আছে কি?


4
সেই কনস্ট্রাক্টরের জাভাদোক নির্দিষ্ট করে যে এটি একটি "খালি তালিকা" তৈরি করে। এটি তার কাজ করছে
কলিনড

উত্তর:


429

পূর্ণসংখ্যাটি কনস্ট্রাক্টরের কাছে প্রেরণ করা হয় এটির প্রাথমিক ক্ষমতাটি , যেমন তার অভ্যন্তরীণ অ্যারেটি আকার পরিবর্তন করার আগে এটির উপাদানগুলির সংখ্যাটি ধারণ করতে পারে (এবং তালিকার প্রাথমিক সংখ্যাগুলির সাথে কোনও সম্পর্ক নেই)।

60 টি জিরো দিয়ে একটি তালিকা শুরু করার জন্য:

List<Integer> list = new ArrayList<Integer>(Collections.nCopies(60, 0));

আপনি যদি 60 টি ভিন্ন অবজেক্টের সাথে একটি তালিকা তৈরি করতে চান তবে আপনি নীচে স্ট্রিম এপিআই ব্যবহার করতে পারেন Supplier:

List<Person> persons = Stream.generate(Person::new)
                             .limit(60)
                             .collect(Collectors.toList());

1
এটি আমার সমাধানের চেয়ে অনেক ভাল (এমনকি আমার আপডেট হওয়া যা আসলে হিহে কাজ করে)। আমি ArrayListযদিও এটি থেকে নতুন করে না তৈরি করার পরামর্শ দিচ্ছি এবং পরিবর্তে কেবল প্রোগ্রামটি করব List। অবশ্যই সিদ্ধান্তটি ওপিতে ছেড়ে গেছে।
কর্সিকা

6
nCopiesপ্রদত্ত তালিকাটি অপরিবর্তনীয়, সুতরাং একটি নতুন তৈরি ArrayListকরা সম্ভবত একটি ভাল ধারণা।
আইয়ুব

4
সাবধান হন যে nCopiesকোনও জটিল অবজেক্টের সাথে ব্যবহারের সময় সংগ্রহটি বিভিন্ন 60 টি ভিন্ন বস্তুর সাথে তাত্ক্ষণিকভাবে ইনস্টল করা হয় না, তবে একই বস্তুর সাথে 60 বার। সুতরাং এটি কেবল আদিমদের জন্য ব্যবহার করুন।
membersound

1
@ মেম্বারসাউন্ড, আমি এমন অনেক পরিস্থিতি বিবেচনা করতে পারি যেখানে nCopiesরেফারেন্স ধরণের সাথে দরকারী: অপরিবর্তনীয় বস্তু যেমন স্ট্রিং, নাল-অবজেক্ট প্যাটার্নস, এনাম কনস্ট্যান্টস ... যাইহোক, আমি 60 টি ভিন্ন ভিন্ন বস্তু তৈরির সমাধান দিয়ে উত্তরটি আপডেট করেছি updated
আইয়ুব

@ আইউব আমি জানি এমন অনেকগুলি পরিস্থিতি রয়েছে যেখানে এনকপিগুলি কার্যকর। আমি কেবল এটি যুক্ত করতে চেয়েছিলাম, যেহেতু আমি পরিবর্তনীয় জিনিসগুলির সাথে এনকোপিগুলি চেষ্টা করেছি এবং অবাক হয়েছিলাম যেটা আমি প্রত্যাশা করেছিলাম তেমন কার্যকর হয়নি। সেক্ষেত্রে যে কেউ একই কাজের চেষ্টা করে। আপডেটের জন্য ধন্যবাদ যদিও!
সদস্যরা

12
// apparently this is broken. Whoops for me!
java.util.Collections.fill(list,new Integer(0));

// this is better
Integer[] data = new Integer[60];
Arrays.fill(data,new Integer(0));
List<Integer> list = Arrays.asList(data);

2
এটি কেবল বিদ্যমান এন্ট্রি সহ একটি তালিকা পূরণ করে। এটি পছন্দসই উপাদানগুলির সাথে এটি আরম্ভ করবে না।
হোয়াইটফ্যাঙ্গ 34

এটি 60 জিরো দিয়ে তালিকাটি পূরণ করবে না।
আইয়ুব

এমনকি এটি 60০ টি অবজেক্ট তৈরি করতে চাইলে যেখানে এটি কোনও তৈরি করতে হবে না।
কলিনড

1
@Frost: যদি আপনি একটি পাবেন IndexOutOfBoundsExceptionসঙ্গেList<Integer> list = new ArrayList<Integer>(60); Collections.fill(list, new Integer(0)); list.get(5);
WhiteFang34

1
Arrays.asListListএমন একটি উত্পাদন করে যা যোগ বা অপসারণের অনুমতি দেয় না, সুতরাং এটি ওপি যা চায় তা ঠিক তার মতো নয়। আপনার কাজ করার দরকার হয় তা যদি কাজ করে setতবে আপনার ক্ষেত্রে কেবল অ্যারে ব্যবহার করা ভাল of
কলিনড

8

আপনি যে 60 টি পাশ দিয়ে যাচ্ছেন তা হ'ল অভ্যন্তরীণ সঞ্চয়স্থানের প্রাথমিক ক্ষমতা। এটি আপনার মনে হয় যে এটি কতটা বড় হতে পারে তার ইঙ্গিত, তবে অবশ্যই এটি এর দ্বারা সীমাবদ্ধ নয়। আপনার যদি মানগুলি পূর্বনির্ধারিত করতে হয় তবে আপনাকে সেগুলি নিজেই সেট করতে হবে, যেমন:

for (int i = 0; i < 60; i++) {
    list.add(0);
}

4

জাভা 8 বাস্তবায়ন (জিরো দিয়ে তালিকা সূচনা 60) :

List<Integer> list = IntStream.of(new int[60])
                    .boxed()
                    .collect(Collectors.toList());
  • new int[N] - শূন্য ও দৈর্ঘ্যের এন দিয়ে পূর্ণ একটি অ্যারে তৈরি করে
  • boxed() - প্রতিটি উপাদান একটি পূর্ণসংখ্যার সাথে বাক্সযুক্ত
  • collect(Collectors.toList()) - স্রোতের উপাদান সংগ্রহ করে

0

এটি ওইটার মতো না. অ্যারেলিস্ট কেবল অ্যারেটিকে অভ্যন্তরীণ সম্মান হিসাবে ব্যবহার করে। যদি আপনি আরও 60 টি উপাদান যোগ করেন তবে আন্ডারলেটিং অ্যারেটি বিস্তৃত হবে। আপনি কখনই এই অ্যারেতে যতটা উপাদান যুক্ত করতে পারবেন আপনার যতটা র্যাম রয়েছে।

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