以下のような配列リストを作成したいのですが。
ArrayList<Individual>[] group = new ArrayList<Individual>()[4]
しかし、それはコンパイルしていません。これどうやってするの?
Oracleのドキュメント に従って:
"パラメータ化された型の配列は作成できません"
代わりに、次のようにします。
ArrayList<ArrayList<Individual>> group = new ArrayList<ArrayList<Individual>>(4);
Tom Hawting - タックラインが示唆しているように、次のようにしたほうがよいでしょう。
List<List<Individual>> group = new ArrayList<List<Individual>>(4);
他の人が言ったように、ArrayListを格納するために別のリストを使うほうがおそらく良いでしょう、しかしあなたが配列を使わなければならないなら:
ArrayList<Individual>[] group = (ArrayList<Individual>[])new ArrayList[4];
これは動作します:
ArrayList<String>[] group = new ArrayList[4];
ArrayListを拡張するクラスを作成することができます
class IndividualList extends ArrayList<Individual> {
}
それから配列を作成します
IndividualList[] group = new IndividualList[10];
私はそれを完全に理解していません。なぜこの質問のために、誰もが配列よりも一般的なタイプを提案している理由です。
n
異なる配列リストのインデックスを作成する必要がある場合はどうなりますか。
List<List<Integer>>
を宣言する場合、n
ArrayList<Integer>
オブジェクトを手動で作成するか、n
リストまたはその他の方法でforループを作成する必要があります。 n
リストを作成します。
List<Integer>[] = (List<Integer>[]) new List<?>[somenumber]
としてキャストして宣言するのは素晴らしいことではありません。自分ですべてのインデックスオブジェクト(配列リスト)を作成する必要がない、良いデザインだと思います
なぜこれ(アレイフォーム)が悪いデザインになるのか、その欠点は何ですか?
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);
このような状況での問題は、特定の位置に追加するために時間の複雑さがo(n)になるような配列リストを使用することです。あなたが配列を使うならば、あなたはあなたの配列を宣言することによってメモリロケーションを作成します、それゆえそれは定数です
これは動作する、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へのクレジット。
ジェネリック型の配列は作成できません。配列リストのリストを作成する:
List<ArrayList<Individual>> group = new ArrayList<ArrayList<Individual>>();
または本当に配列が必要な場合(警告:デザインが悪い!)
ArrayList[] group = new ArrayList[4];
作成と初期化
Object[] yourArray = new Object[ARRAY_LENGTH];
書き込みアクセス
yourArray[i]= someArrayList;
内部のArrayListの要素にアクセスする:
((ArrayList<YourType>) yourArray[i]).add(elementOfYourType); //or other method
読み取りアクセス
配列要素iをArrayListとして読み込むには、型キャストを使用します。
someElement= (ArrayList<YourType>) yourArray[i];
配列要素iの場合:インデックスjのArrayList要素を読み込む
arrayListElement= ((ArrayList<YourType>) yourArray[i]).get(j);
List [] listArr = new ArrayList [4];
上の行は警告を出しますが、動作します(すなわち、ArrayList of ArrayListを作成します)。
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を表すための優雅な解決策であることを発見しました。
あなたはこのように作成することができますArrayList<Individual>[] group = (ArrayList<Individual>[])new ArrayList[4];
あなたは非ジェネリック型の配列を作成し、それからジェネリック型にキャストする必要があります。
ArrayList<Integer>[] graph = new ArrayList[numCourses]
動作します。
ArrayList<String> al[] = new ArrayList[n+1];
for(int i = 0;i<n;i++){
al[i] = new ArrayList<String>();
}
ArrayList<String>[] lists = (ArrayList<String>[])new ArrayList[10];
私はこれが使いやすいと思います...
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型の配列を作成します
`ArrayList<Integer>[] a = new ArrayList[n];`
//配列の各要素に対してArrayListを作成する
for(int i=0; i<n; i++){
a[i] = new ArrayList<Integer>();
}