3

Javaに疑問が1つあります。動的に作成することもArrayListString[]forループ内に作成することもできます。たとえば、私のアプリにはカテゴリフィールドがあり(静的ではなく、サーバーから取得)、カテゴリのサイズに基づいてオブジェクトを作成ArrayListまたはオブジェクト化します。ループ内でString[]ダイナミックを作成するにはどうすればよいですか?ArrayList

私のコードは次のとおりです。

for(int i =0; i<20; i++)
{
    ArrayList <String> list(i) = new ArrayList<String>();
}

このようなオブジェクトを作成できますか?カテゴリの位置に基づいて、list(positon)のようなリストアイテムを呼び出すことができますが、このJavaのようにできますか?

4

4 に答える 4

6

ArrayListは動的配列です。つまり、次のような新しい要素を追加できます。

ArrayList <String> list = new ArrayList<String>();
for(int i =0; i<20; i++)
{
 list.add("string"+i);
}

list(position) のようなリスト項目を呼び出すことができますが、この Java のようにできますか?

ArrayList にはget(position)、位置からオブジェクトを取得するメソッドがあります。

String str1 = list.get(0);//0th position 
于 2012-10-08T07:42:01.357 に答える
5

ArrayListサイズを気にしなくていいのもポイントです。より多くのアイテムが追加されると、動的にサイズが変更されます。のソースコードを見ることができますadd

410       public boolean add(E e) {
411           ensureCapacityInternal(size + 1);  // Increments modCount!!
412           elementData[size++] = e;
413           return true;
414       }

ensureCapacityInternal:

183       private void ensureCapacityInternal(int minCapacity) {
184           modCount++;
185           // overflow-conscious code
186           if (minCapacity - elementData.length > 0)
187               grow(minCapacity);
188       }

grow:

204       private void grow(int minCapacity) {
205           // overflow-conscious code
206           int oldCapacity = elementData.length;
207           int newCapacity = oldCapacity + (oldCapacity >> 1);
208           if (newCapacity - minCapacity < 0)
209               newCapacity = minCapacity;
210           if (newCapacity - MAX_ARRAY_SIZE > 0)
211               newCapacity = hugeCapacity(minCapacity);
212           // minCapacity is usually close to size, so this is a win:
213           elementData = Arrays.copyOf(elementData, newCapacity);
214       }
于 2012-10-08T07:41:50.747 に答える
2

あなたが何をしたいのか理解できたら、次のようにします。(ところで、これが正しければ、実行したいことを説明するための用語は、「動的アレイリスト」ではなく「ネストされたアレイリスト」です。アレイリストは(他の人がすでに指摘しているように)デフォルトで動的です)。

List<List<String>> lists = new Arraylist<List<String>>();

for(int i = 0; i < getNumCategoriesFromServer(); i++){
    lists.add(new ArrayList<String>());
}

これで、次のように実行できます。

lists.get(0).add(someItemFromCategoryZero);
lists.get(j).add(someItemFromCategoryJ);

list.get(i)カテゴリのリストを返しますi

ArrayListsの配列を作成することもできますが、コンパイル時の型の安全性は保証されません。

于 2012-10-08T08:42:43.930 に答える