অ্যারেলিস্টগুলির একটি অ্যারে তৈরি করুন


175

আমি নীচের মতো অ্যারেলিস্টের একটি অ্যারে তৈরি করতে চাই:

ArrayList<Individual>[] group = new ArrayList<Individual>()[4]

কিন্তু এটি সংকলন হয় না। কিভাবে আমি এটি করতে পারব?


8
অ্যারে এবং সংগ্রহগুলি মিশ্রিত করবেন না। প্রকৃতপক্ষে, আপনি যদি আদিমদের সাথে ডিল না করেন (বা আপনি কী করছেন আপনি তা জানেন) তবে অ্যারে ব্যবহার করবেন না। অ্যারেগুলি একটি ব্যবহারযোগ্য দুঃস্বপ্ন, তারা আপনার কোডটিকে অভাবনীয় করে তোলে।
শন প্যাট্রিক ফ্লয়েড

13
পছন্দ করুন
ব্যবহারকারী

3
নিবন্ধন করুন একটি অ্যারে বৃদ্ধি করতে পারে না, আপনি কোনও অ্যারেতে কিছু সন্নিবেশ করতে পারবেন না, অ্যারে স্ট্যান্ডার্ড পদ্ধতিগুলি যেমন হ্যাশকোড বা টু স্ট্রিং ইত্যাদির উপরে ওভাররাইড করতে পারে না
সান প্যাট্রিক ফ্লয়েড

9
@ সানপ্যাট্রিকফ্লোয়েড ঠিক আছে - ভাল আমার ঠিক চারটি অ্যারেলিস্ট প্রয়োজন - সূচক অনুসারে আমি প্রত্যেকের অ্যাক্সেস করার পরিকল্পনা করি - আমার বাড়তে বা সঙ্কুচিত হওয়ার জন্য বাইরের অ্যারে লাগবে না - আমার কোনও স্ট্রিং বা হ্যাশকোড ইত্যাদির দরকার নেই - - আমার কাছে, একটি অ্যারের এখানে সুস্পষ্ট পছন্দ - আপনি এই পরিস্থিতিতে বিকল্প হিসাবে কী প্রস্তাব করবেন?
BrainSlugs83

4
ঠিক আছে এটি একটি পুরানো প্রশ্ন তবে আমি যেভাবেই জিজ্ঞাসা করব এবং কেউ উত্তর দিচ্ছে কিনা তা দেখতে যাচ্ছি। আমি সবাইকে দেখছি কেন তালিকার একটি অ্যারে হ'ল একটি ভয়ংকর ধারণা, খারাপ কোডিং অনুশীলন ইত্যাদি I আমি এটিকে দেখলাম কারণ আমি হ্যাশ চেইন করতে শিখছি, এবং হ্যাশ চেইনের সংজ্ঞাটি তালিকার একটি অ্যারে! তাহলে ঠিক কীভাবে কেন্দ্রীয় প্রোগ্রামিং ডেটা স্ট্রাকচারটি ভয়ানক কোডিং অনুশীলন হতে পারে? বা এটি কি কেবলমাত্র @ শিয়ান দ্বারা উল্লিখিত IYKWYD বিভাগে আসে?
জিম্বোয়েব

উত্তর:


142

অনুযায়ী ওরাকল ডকুমেন্টেশন :

"আপনি প্যারামিটারাইজড ধরণের অ্যারে তৈরি করতে পারবেন না"

পরিবর্তে, আপনি করতে পারেন:

ArrayList<ArrayList<Individual>> group = new ArrayList<ArrayList<Individual>>(4);

টম হাটিংয়ের পরামর্শ অনুসারে - ট্যাকলাইন, এটি করা আরও ভাল:

List<List<Individual>> group = new ArrayList<List<Individual>>(4);

20
List<List<Individual>> group = new ArrayList<List<Individual>>();সম্ভবত আরও ভাল হবে।
টম হাটিন -

4
"জেনেরিক ধরণের অ্যারে তৈরি করতে পারে না" এর অর্থ কী? এটি আমার কাছে সত্যিকার অর্থে বোধগম্য নয় কারণ এটি জেনেরিক নয় যদি আপনি তার ধারণাকে ধরে রাখেন, ঠিক?
অ্যান্ডি

5
আমি উত্সাহিত হয়ে অবাক হয়েছি কারণ এটি প্রশ্নের উত্তর দেয় না (যেমন আমি এটি করতে চাই, কীভাবে এটি করতে পারি)। 1 ম বাক্য ছাড়া সম্ভবত।
ফ্লোরিয়ান এফ

15
তালিকা রেফারেন্স অ্যারেলিস্টের চেয়ে ভাল কেন?
শিফু

3
@ সিফু একটি তালিকা রেফারেন্স অ্যারেলিস্টের চেয়ে বেশি সাধারণ; তালিকা হিসাবে ঘোষণা করে অ্যারেলিস্টের এপিআইকে দূরে সরিয়ে দেয় যা তালিকা API ছাড়িয়ে যায়। কারণ এরিআইলিস্টের অতিরিক্ত যে অ্যারেলিস্টের সাথে রেফারেন্সের এপিআই রয়েছে তা নাড়িয়েই যার তালিকা সম্ভবত যেভাবেই প্রয়োজন হয় তার সম্পূর্ণরূপে তালিকার রেফারেন্সটিকে সহজ করে দেয় কারণ এটি ভাল। আপনার কেবলমাত্র অ্যারেলিস্ট হিসাবে ঘোষণা করতে হবে যদি আপনার রেফারেন্সের মাধ্যমে উপলভ্য হওয়ার জন্য এর এপিআই থেকে নির্দিষ্ট কিছু প্রয়োজন হয়।
cellepo

98

অন্যরা যেমন উল্লেখ করেছে যে অ্যারেলিস্টটি সংরক্ষণ করার জন্য অন্য তালিকাটি ব্যবহার করা ভাল তবে আপনার যদি অ্যারে ব্যবহার করতে হয় তবে:

ArrayList<Individual>[] group = (ArrayList<Individual>[])new ArrayList[4];

4
কেউ কেন আপনার উপরের স্নিপেটটি পছন্দ করে তা ভাল করে ব্যাখ্যা করতে পারে বলে মনে হয় না। আপনি কেন এই উপরের তালিকা ব্যবহারের পরামর্শ দিচ্ছেন?
clankill3r

3
যদি অ্যারে গোষ্ঠী পরিবর্তন না হয়, তবে এই পদ্ধতিটি আরও ভাল, কারণ অ্যারে তালিকা <> ক্লাসগুলির চেয়ে দ্রুত।
বোরঝ

33
আসলে প্রশ্নের উত্তর দেওয়ার জন্য ধন্যবাদ। কোনও প্রসঙ্গ ছাড়াই স্বয়ংক্রিয়ভাবে একটি তালিকা অনুমান করার কোনও যৌক্তিক কারণ নেই an
স্পেশাল সস

3
এটি কোনও কারণ @ ক্যালভান্সার উত্তর ( ArrayList<String>[] group = new ArrayList[4]) এর চেয়ে বেশি পছন্দনীয় ? অতিরিক্ত ভাল doe castালাই কি করেন?
cellepo

2
new ArrayList<?>[N]কাঁচা ধরণের ব্যবহার এড়াতে আপনার ব্যবহার করা উচিত ।
রেডিওডেফ

80

এইটা কাজ করে:

ArrayList<String>[] group = new ArrayList[4];

1
এটি সন্তোষজনকভাবে পছন্দসই সুবিধা পেয়েছে যে স্ট্রিং (যেমন: ArrayList<String>পরিবর্তে ArrayList<NotString>) groupসংকলন না করে ছাড়া কোনও বস্তুর একটি
অ্যারেলিস্ট যুক্ত

12
এটি একটি সতর্কতা উত্পন্ন করে:Note: hello.java uses unchecked or unsafe operations. Note: Recompile with -Xlint:unchecked for details.
গণিত

24

আপনি অ্যারেলিস্ট প্রসারিত একটি শ্রেণি তৈরি করতে পারেন

class IndividualList extends ArrayList<Individual> {

}

এবং তারপরে অ্যারে তৈরি করুন

IndividualList[] group = new IndividualList[10];

17

আমি সম্পূর্ণরূপে এটি পাই না, কেন সকলেই বিশেষত এই প্রশ্নের জন্য অ্যারের উপরে জেনেরিক ধরণের পরামর্শ দিচ্ছেন।

আমার প্রয়োজন যদি সূচক হয় n বিভিন্ন অ্যারেলিস্টগুলি ।

ঘোষণার সাথে সাথে List<List<Integer>>আমাকে n ArrayList<Integer>ম্যানুয়ালি অবজেক্ট তৈরি করতে হবে nবা তালিকা তৈরি করতে অন্য কোনও উপায়ে লুপ তৈরি করা দরকার , যে কোনও উপায়ে তৈরি করা আমার দায়িত্ব হবে সর্বদাn তালিকা

যদি আমরা এটি castালাইয়ের মাধ্যমে ঘোষণা করি তবে এটি দুর্দান্ত নয় List<Integer>[] = (List<Integer>[]) new List<?>[somenumber] । আমি এটিকে একটি ভাল নকশা হিসাবে দেখছি যেখানে নিজের দ্বারা সমস্ত সূচীকরণ বস্তু (অ্যারেলিস্ট) তৈরি করতে হয় না

কেহ আমাকে আলোকিত করতে পারে কেন এটি (অ্যারেফর্ম) খারাপ ডিজাইন হবে এবং এর অসুবিধাগুলি কী?


আফ্রিএফট এটি জাভা টেবিলে নিয়ে আসে এমন ভয়াবহ টাইপিং সিস্টেম দ্বারা উত্সাহিত এক ধরণের কার্গো কাল্ট মানসিকতা বলে মনে হয়।
BrainSlugs83

@ এসএমএসআইএস: এটি কোনও খারাপ নকশা নয়। সমস্যাটি হ'ল, অনেক লেখক পুরো প্রশ্নটি পড়েন না বা পরিষ্কারভাবে বুঝতে পারেন না understand
টেস্টো

16

আপনি অ্যারে অফ অ্যারেলিস্ট তৈরি করতে পারেন

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);

2
আপনি যখন ArrayList::newএটি ব্যবহার করবেন , এটি ArrayList(int)বর্তমান সূচকটির সাথে কনট্রাক্টরকে আর্গুমেন্ট হিসাবে বলবে - অ্যারেলিস্ট (1), অ্যারেলিস্ট (2), অ্যারেলিস্ট (3) ইত্যাদি। সুতরাং, আপনি নীচের আকারের বা অত্যধিক আকারের অ্যারে দিয়ে শেষ করবেন, আপনার ব্যবহারের উপর নির্ভর করে। আমি এটি ব্যবহার করে নিরুৎসাহিত করব এবং এর পরিবর্তে দ্বিতীয় পদ্ধতির পছন্দটি করব যেখানে আপনি নিজের ল্যাম্বডা অভিব্যক্তিতে নিজেকে নির্মাতা হিসাবে ডাকেন।
জেনিস

8

এটি কাজ করে, অ্যারেলিস্টের অ্যারে। এটি কীভাবে কাজ করে তা বোঝার চেষ্টা করুন।

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]);
    }
}

কিছু কিছু কোডের জন্য ক্যালভান্সারের কাছে ক্রেডিট।


6

এই পরিস্থিতিতে সমস্যাটি একটি অ্যারেলিস্ট ব্যবহার করে আপনি নির্দিষ্ট অবস্থানে যোগ করার জন্য ও (এন) এর একটি সময়ের জটিলতা পান। আপনি যদি একটি অ্যারে ব্যবহার করেন তবে আপনি আপনার অ্যারে ঘোষণা করে একটি মেমরি অবস্থান তৈরি করেন তাই এটি স্থির


অ্যারে এবং অ্যারেলিস্ট উভয়ের জন্য একটি নির্দিষ্ট অবস্থানে যুক্ত করা ও (এন)। উভয় অ্যারে এবং অ্যারেলিস্টের জন্য ফিলিংও ও (এন) is
নবীন

2
একটি নির্দিষ্ট অবস্থানে যুক্ত করা অ্যারেগুলির জন্য ও (1)। এটি অ্যারেলিস্টের জন্য ও (এন), তবে অ্যারেগুলির জন্য ও (1)।
এভিয়েমেট

3

আপনি জেনেরিক ধরণের অ্যারে তৈরি করতে পারবেন না। অ্যারেলিস্টগুলির তালিকা তৈরি করুন:

 List<ArrayList<Individual>> group = new ArrayList<ArrayList<Individual>>();

বা যদি আপনার সত্যিই অ্যারে দরকার হয় (সতর্কতা: খারাপ নকশা!):

 ArrayList[] group = new ArrayList[4];

2
  1. সৃষ্টি এবং সূচনা

    Object[] yourArray = new Object[ARRAY_LENGTH];
  2. অ্যাক্সেস লিখুন

    yourArray[i]= someArrayList;

    অভ্যন্তরীণ অ্যারেলিস্টের উপাদানগুলিতে অ্যাক্সেস করতে:

    ((ArrayList<YourType>) yourArray[i]).add(elementOfYourType); //or other method
  3. অ্যাক্সেস পড়ুন

    অ্যারে এলিমেন্টটি আমি অ্যারেলিস্ট ব্যবহারের ধরণের কাস্টিং হিসাবে পড়তে:

    someElement= (ArrayList<YourType>) yourArray[i];

    অ্যারে এলিমেন্টের জন্য i: সূচি j এ অ্যারেলিস্ট উপাদান পড়তে

    arrayListElement= ((ArrayList<YourType>) yourArray[i]).get(j);

2

তালিকা [] listArr = নতুন অ্যারেলিস্ট [4];

উপরের রেখাটি সতর্কতা দেয়, তবে এটি কাজ করে (যেমন এটি অ্যারেলিস্টের অ্যারে তৈরি করে)


1

স্ট্যাটিক্যালি অ্যারেলিস্টগুলির একটি অ্যারে ঘোষণা করতে, বলুন, পয়েন্ট হিসাবে স্প্রিট পজিশন:

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>();
    }
}

সতর্কতা এবং কিছু জটিল পরামর্শ সত্ত্বেও, আমি একই ধরণের সম্পর্কিত অ্যারেলিস্ট উপস্থাপনের জন্য মার্জিত সমাধান হিসাবে অ্যারেলিস্টগুলির একটি অ্যারে পেয়েছি।



1

আপনি এটি তৈরি করতে পারেন ArrayList<Individual>[] group = (ArrayList<Individual>[])new ArrayList[4];

আপনাকে নন জেনেরিক টাইপের অ্যারে তৈরি করতে হবে এবং তারপরে এটিকে জেনেরিকের মধ্যে ফেলে দিতে হবে।



0

আমি এটি ব্যবহার করা সহজ বলে মনে করি ...

static ArrayList<Individual> group[];
......
void initializeGroup(int size)
{
 group=new ArrayList[size];
 for(int i=0;i<size;i++)
 {
  group[i]=new ArrayList<Individual>();
 }

0

তুমি এটি করতে পারো :

// টাইপ অ্যারেলিস্টের একটি অ্যারে তৈরি করুন

`ArrayList<Integer>[] a = new ArrayList[n];`

// অ্যারের প্রতিটি উপাদানের জন্য একটি অ্যারেলিস্ট তৈরি করুন

for(int i=0; i<n; i++){ 
    a[i] = new ArrayList<Integer>();
}


-1

আপনি একটি তালিকা তৈরি করতে পারেন [] এবং লুপের মাধ্যমে সেগুলি সূচনা করতে পারেন। এটি ত্রুটি ছাড়াই সংকলন করে:

List<e>[] l;
for(int i = 0; i < l.length; i++){
    l[i] = new ArrayList<e>();
}

এটি অ্যারেলিস্ট [] l এর সাথেও কাজ করে।


2
l.lengthফর-লুপে অপরিবর্তিত এটি একটি রানটাইম ত্রুটি হতে পারে।
bourbaki4481472

l এর দৈর্ঘ্য হওয়ার জন্য আরম্ভ করা হয়নি, এটি লুপের জন্য পৌঁছালে এটি একটি নাল পয়েন্টার। উদাহরণস্বরূপ <e> [] l = নতুন তালিকা [LENGTH];
এরিক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.