web-dev-qa-db-ja.com

アレイリストの配列を作成する

以下のような配列リストを作成したいのですが。

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

しかし、それはコンパイルしていません。これどうやってするの?

154
user

Oracleのドキュメント に従って:

"パラメータ化された型の配列は作成できません"

代わりに、次のようにします。

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

Tom Hawting - タックラインが示唆しているように、次のようにしたほうがよいでしょう。

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

他の人が言ったように、ArrayListを格納するために別のリストを使うほうがおそらく良いでしょう、しかしあなたが配列を使わなければならないなら:

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

これは動作します:

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

ArrayListを拡張するクラスを作成することができます

class IndividualList extends ArrayList<Individual> {

}

それから配列を作成します

IndividualList[] group = new IndividualList[10];
23
user2558221

私はそれを完全に理解していません。なぜこの質問のために、誰もが配列よりも一般的なタイプを提案している理由です。

n異なる配列リストのインデックスを作成する必要がある場合はどうなりますか。

List<List<Integer>>を宣言する場合、nArrayList<Integer>オブジェクトを手動で作成するか、nリストまたはその他の方法でforループを作成する必要があります。 nリストを作成します。

List<Integer>[] = (List<Integer>[]) new List<?>[somenumber]としてキャストして宣言するのは素晴らしいことではありません。自分ですべてのインデックスオブジェクト(配列リスト)を作成する必要がない、良いデザインだと思います

なぜこれ(アレイフォーム)が悪いデザインになるのか、その欠点は何ですか?

17
smslce

ArrayListの配列を作成できます

List<Integer>[] outer = new List[number];
for (int i = 0; i < number; i++) {
    outer[i] = new ArrayList<>();
}

これは、このようなシナリオで役立ちます。あなたは外側のもののサイズを知っています。しかし、内側のもののサイズは異なります。ここでは、サイズが異なる配列リストを含む固定長の配列を作成できます。これがあなたに役立つことを願っています。

Java 8以上では、もっと良い方法でそれを行うことができます。

List<Integer>[] outer = new List[number];
Arrays.setAll(outer, element -> new ArrayList<>());

メソッド参照を使った方がより良い

List<Integer>[] outer = new List[10];
Arrays.setAll(outer,  ArrayList :: new);
11

このような状況での問題は、特定の位置に追加するために時間の複雑さがo(n)になるような配列リストを使用することです。あなたが配列を使うならば、あなたはあなたの配列を宣言することによってメモリロケーションを作成します、それゆえそれは定数です

6
Mark Odey

これは動作する、ArrayListの配列。それがどのように機能するのか理解するようにしてください。

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

一部のコードについてはKelvincerへのクレジット。

5
Rich

ジェネリック型の配列は作成できません。配列リストのリストを作成する:

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

または本当に配列が必要な場合(警告:デザインが悪い!)

 ArrayList[] group = new ArrayList[4];
3
Piotr Gwiazda
  1. 作成と初期化

    Object[] yourArray = new Object[ARRAY_LENGTH];
    
  2. 書き込みアクセス

    yourArray[i]= someArrayList;
    

    内部のArrayListの要素にアクセスする:

    ((ArrayList<YourType>) yourArray[i]).add(elementOfYourType); //or other method
    
  3. 読み取りアクセス

    配列要素iをArrayListとして読み込むには、型キャストを使用します。

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

    配列要素iの場合:インデックスjのArrayList要素を読み込む

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

List [] listArr = new ArrayList [4];

上の行は警告を出しますが、動作します(すなわち、ArrayList of ArrayListを作成します)。

1
ashu17188

Sprite位置をPointとして静的にArrayListsの配列を宣言するには、次のようにします。

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の配列が同じタイプの関連するArrayListを表すための優雅な解決策であることを発見しました。

1
Androidcoder

あなたはこのように作成することができますArrayList<Individual>[] group = (ArrayList<Individual>[])new ArrayList[4];

あなたは非ジェネリック型の配列を作成し、それからジェネリック型にキャストする必要があります。

1
Tejendra

ArrayList<Integer>[] graph = new ArrayList[numCourses]動作します。

0
xiankun zhu
ArrayList<String> al[] = new ArrayList[n+1];
for(int i = 0;i<n;i++){
   al[i] = new ArrayList<String>();
}
0
HeadAndTail
ArrayList<String>[] lists = (ArrayList<String>[])new ArrayList[10]; 
0
Labeo

私はこれが使いやすいと思います...

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型の配列を作成します

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

//配列の各要素に対してArrayListを作成する

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