আমি নীচের মতো অ্যারেলিস্টের একটি অ্যারে তৈরি করতে চাই:
ArrayList<Individual>[] group = new ArrayList<Individual>()[4]
কিন্তু এটি সংকলন হয় না। কিভাবে আমি এটি করতে পারব?
আমি নীচের মতো অ্যারেলিস্টের একটি অ্যারে তৈরি করতে চাই:
ArrayList<Individual>[] group = new ArrayList<Individual>()[4]
কিন্তু এটি সংকলন হয় না। কিভাবে আমি এটি করতে পারব?
উত্তর:
অনুযায়ী ওরাকল ডকুমেন্টেশন :
"আপনি প্যারামিটারাইজড ধরণের অ্যারে তৈরি করতে পারবেন না"
পরিবর্তে, আপনি করতে পারেন:
ArrayList<ArrayList<Individual>> group = new ArrayList<ArrayList<Individual>>(4);
টম হাটিংয়ের পরামর্শ অনুসারে - ট্যাকলাইন, এটি করা আরও ভাল:
List<List<Individual>> group = new ArrayList<List<Individual>>(4);
List<List<Individual>> group = new ArrayList<List<Individual>>();
সম্ভবত আরও ভাল হবে।
অন্যরা যেমন উল্লেখ করেছে যে অ্যারেলিস্টটি সংরক্ষণ করার জন্য অন্য তালিকাটি ব্যবহার করা ভাল তবে আপনার যদি অ্যারে ব্যবহার করতে হয় তবে:
ArrayList<Individual>[] group = (ArrayList<Individual>[])new ArrayList[4];
ArrayList<String>[] group = new ArrayList[4]
) এর চেয়ে বেশি পছন্দনীয় ? অতিরিক্ত ভাল doe castালাই কি করেন?
new ArrayList<?>[N]
কাঁচা ধরণের ব্যবহার এড়াতে আপনার ব্যবহার করা উচিত ।
এইটা কাজ করে:
ArrayList<String>[] group = new ArrayList[4];
ArrayList<String>
পরিবর্তে ArrayList<NotString>
) group
সংকলন না করে ছাড়া কোনও বস্তুর একটি
Note: hello.java uses unchecked or unsafe operations. Note: Recompile with -Xlint:unchecked for details.
আপনি অ্যারেলিস্ট প্রসারিত একটি শ্রেণি তৈরি করতে পারেন
class IndividualList extends ArrayList<Individual> {
}
এবং তারপরে অ্যারে তৈরি করুন
IndividualList[] group = new IndividualList[10];
আমি সম্পূর্ণরূপে এটি পাই না, কেন সকলেই বিশেষত এই প্রশ্নের জন্য অ্যারের উপরে জেনেরিক ধরণের পরামর্শ দিচ্ছেন।
আমার প্রয়োজন যদি সূচক হয় n
বিভিন্ন অ্যারেলিস্টগুলি ।
ঘোষণার সাথে সাথে List<List<Integer>>
আমাকে n
ArrayList<Integer>
ম্যানুয়ালি অবজেক্ট তৈরি করতে হবে n
বা তালিকা তৈরি করতে অন্য কোনও উপায়ে লুপ তৈরি করা দরকার , যে কোনও উপায়ে তৈরি করা আমার দায়িত্ব হবে সর্বদাn
তালিকা
যদি আমরা এটি castালাইয়ের মাধ্যমে ঘোষণা করি তবে এটি দুর্দান্ত নয় List<Integer>[] = (List<Integer>[]) new List<?>[somenumber]
। আমি এটিকে একটি ভাল নকশা হিসাবে দেখছি যেখানে নিজের দ্বারা সমস্ত সূচীকরণ বস্তু (অ্যারেলিস্ট) তৈরি করতে হয় না
কেহ আমাকে আলোকিত করতে পারে কেন এটি (অ্যারেফর্ম) খারাপ ডিজাইন হবে এবং এর অসুবিধাগুলি কী?
আপনি অ্যারে অফ অ্যারেলিস্ট তৈরি করতে পারেন
List<Integer>[] outer = new List[number];
for (int i = 0; i < number; i++) {
outer[i] = new ArrayList<>();
}
এটি এর মতো দৃশ্যে সহায়ক হবে। আপনি বাইরেরটির আকার জানেন। তবে অভ্যন্তরের আকারগুলির আকার পৃথক হয়। এখানে আপনি স্থির দৈর্ঘ্যের একটি অ্যারে তৈরি করতে পারেন যার আকার-পরিবর্তিত অ্যারে তালিকা রয়েছে। আশা করি এটি আপনার পক্ষে সহায়ক হবে।
ইন জাভা 8 এবং তার চাইতে বেশী আপনি একটি অনেক ভালো ভাবে এটা করতে পারেন।
List<Integer>[] outer = new List[number];
Arrays.setAll(outer, element -> new ArrayList<>());
এমনকি পদ্ধতি রেফারেন্স ব্যবহার করে আরও ভাল
List<Integer>[] outer = new List[10];
Arrays.setAll(outer, ArrayList :: new);
ArrayList::new
এটি ব্যবহার করবেন , এটি ArrayList(int)
বর্তমান সূচকটির সাথে কনট্রাক্টরকে আর্গুমেন্ট হিসাবে বলবে - অ্যারেলিস্ট (1), অ্যারেলিস্ট (2), অ্যারেলিস্ট (3) ইত্যাদি। সুতরাং, আপনি নীচের আকারের বা অত্যধিক আকারের অ্যারে দিয়ে শেষ করবেন, আপনার ব্যবহারের উপর নির্ভর করে। আমি এটি ব্যবহার করে নিরুৎসাহিত করব এবং এর পরিবর্তে দ্বিতীয় পদ্ধতির পছন্দটি করব যেখানে আপনি নিজের ল্যাম্বডা অভিব্যক্তিতে নিজেকে নির্মাতা হিসাবে ডাকেন।
এটি কাজ করে, অ্যারেলিস্টের অ্যারে। এটি কীভাবে কাজ করে তা বোঝার চেষ্টা করুন।
import java.util.*;
public class ArrayOfArrayList {
public static void main(String[] args) {
// Put the length of the array you need
ArrayList<String>[] group = new ArrayList[15];
for (int x = 0; x < group.length; x++) {
group[x] = new ArrayList<>();
}
//Add some thing to first array
group[0].add("Some");
group[0].add("Code");
//Add some thing to Secondarray
group[1].add("In here");
//Try to output 'em
System.out.println(group[0]);
System.out.println(group[1]);
}
}
কিছু কিছু কোডের জন্য ক্যালভান্সারের কাছে ক্রেডিট।
এই পরিস্থিতিতে সমস্যাটি একটি অ্যারেলিস্ট ব্যবহার করে আপনি নির্দিষ্ট অবস্থানে যোগ করার জন্য ও (এন) এর একটি সময়ের জটিলতা পান। আপনি যদি একটি অ্যারে ব্যবহার করেন তবে আপনি আপনার অ্যারে ঘোষণা করে একটি মেমরি অবস্থান তৈরি করেন তাই এটি স্থির
আপনি জেনেরিক ধরণের অ্যারে তৈরি করতে পারবেন না। অ্যারেলিস্টগুলির তালিকা তৈরি করুন:
List<ArrayList<Individual>> group = new ArrayList<ArrayList<Individual>>();
বা যদি আপনার সত্যিই অ্যারে দরকার হয় (সতর্কতা: খারাপ নকশা!):
ArrayList[] group = new ArrayList[4];
সৃষ্টি এবং সূচনা
Object[] yourArray = new Object[ARRAY_LENGTH];
অ্যাক্সেস লিখুন
yourArray[i]= someArrayList;
অভ্যন্তরীণ অ্যারেলিস্টের উপাদানগুলিতে অ্যাক্সেস করতে:
((ArrayList<YourType>) yourArray[i]).add(elementOfYourType); //or other method
অ্যাক্সেস পড়ুন
অ্যারে এলিমেন্টটি আমি অ্যারেলিস্ট ব্যবহারের ধরণের কাস্টিং হিসাবে পড়তে:
someElement= (ArrayList<YourType>) yourArray[i];
অ্যারে এলিমেন্টের জন্য i: সূচি j এ অ্যারেলিস্ট উপাদান পড়তে
arrayListElement= ((ArrayList<YourType>) yourArray[i]).get(j);
স্ট্যাটিক্যালি অ্যারেলিস্টগুলির একটি অ্যারে ঘোষণা করতে, বলুন, পয়েন্ট হিসাবে স্প্রিট পজিশন:
ArrayList<Point>[] positionList = new ArrayList[2];
public Main(---) {
positionList[0] = new ArrayList<Point>(); // Important, or you will get a NullPointerException at runtime
positionList[1] = new ArrayList<Point>();
}
পরিবর্তনশীল:
ArrayList<Point>[] positionList;
int numberOfLists;
public Main(---) {
numberOfLists = 2;
positionList = new ArrayList[numberOfLists];
for(int i = 0; i < numberOfLists; i++) {
positionList[i] = new ArrayList<Point>();
}
}
সতর্কতা এবং কিছু জটিল পরামর্শ সত্ত্বেও, আমি একই ধরণের সম্পর্কিত অ্যারেলিস্ট উপস্থাপনের জন্য মার্জিত সমাধান হিসাবে অ্যারেলিস্টগুলির একটি অ্যারে পেয়েছি।
ArrayList<Integer>[] graph = new ArrayList[numCourses]
এটা কাজ করে।
আমি এটি ব্যবহার করা সহজ বলে মনে করি ...
static ArrayList<Individual> group[];
......
void initializeGroup(int size)
{
group=new ArrayList[size];
for(int i=0;i<size;i++)
{
group[i]=new ArrayList<Individual>();
}
তুমি এটি করতে পারো :
// টাইপ অ্যারেলিস্টের একটি অ্যারে তৈরি করুন
`ArrayList<Integer>[] a = new ArrayList[n];`
// অ্যারের প্রতিটি উপাদানের জন্য একটি অ্যারেলিস্ট তৈরি করুন
for(int i=0; i<n; i++){
a[i] = new ArrayList<Integer>();
}
ArrayList<String> al[] = new ArrayList[n+1];
for(int i = 0;i<n;i++){
al[i] = new ArrayList<String>();
}
আপনি একটি তালিকা তৈরি করতে পারেন [] এবং লুপের মাধ্যমে সেগুলি সূচনা করতে পারেন। এটি ত্রুটি ছাড়াই সংকলন করে:
List<e>[] l;
for(int i = 0; i < l.length; i++){
l[i] = new ArrayList<e>();
}
এটি অ্যারেলিস্ট [] l এর সাথেও কাজ করে।
l.length
ফর-লুপে অপরিবর্তিত এটি একটি রানটাইম ত্রুটি হতে পারে।