以下のようなarraylistの配列を作成したいと思います。
ArrayList<Individual>[] group = new ArrayList<Individual>()[4]
しかし、それはコンパイルされていません。これどうやってするの?
以下のようなarraylistの配列を作成したいと思います。
ArrayList<Individual>[] group = new ArrayList<Individual>()[4]
しかし、それはコンパイルされていません。これどうやってするの?
回答:
Oracleのドキュメントに従って:
「パラメーター化された型の配列は作成できません」
代わりに、次のことができます。
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を格納する方がおそらく良いでしょうが、配列を使用する必要がある場合:
ArrayList<Individual>[] group = (ArrayList<Individual>[])new ArrayList[4];
ArrayList<String>[] group = new ArrayList[4]
)よりも望ましい理由は何ですか?キャストは何をすればよいでしょうか?
new ArrayList<?>[N]
rawタイプの使用を避けるために使用する必要があります。
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);
ArrayList::new
を呼び出しますArrayList(int)
-ArrayList(1)、ArrayList(2)、ArrayList(3)など。したがって、サイズが小さすぎるか、大きすぎる配列になります。用途に応じて。私はそれを使用しないようにします。代わりに、ラムダ式でコンストラクタを自分で呼び出す2番目のアプローチを優先します。
これは機能し、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へのクレジット。
この状況の問題は、arraylistを使用することにより、特定の位置に追加するためにo(n)の時間の複雑さを取得することです。配列を使用する場合は、配列を宣言することによってメモリ位置を作成するため、定数です。
ジェネリック型の配列は作成できません。ArrayListのリストを作成します。
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);
たとえばスプライトの位置をArrayListの配列として静的に宣言するには、次のようにします。
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<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<String> al[] = new ArrayList[n+1];
for(int i = 0;i<n;i++){
al[i] = new ArrayList<String>();
}
List []を作成し、forループで初期化できます。エラーなしでコンパイルされます:
List<e>[] l;
for(int i = 0; i < l.length; i++){
l[i] = new ArrayList<e>();
}
arrayList [] lでも機能します。
l.length
forループでは未定義です。これは実行時エラーの可能性があります。