3

我对java有一个疑问,我们可以创建动态的ArrayList还是String[]在for循环中。例如,在我的应用程序中有类别字段(不是静态的,从服务器获取),我想根据类别的大小创建ArrayListString[]对象。如何ArrayList在循环中创建动态?

我的代码如下:

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

我们可以创建这样的对象吗?基于类别位置,我可以调用列表(位置)之类的列表项,我们可以像这样java吗?

4

4 回答 4

6

ArrayList是一个动态数组,即您可以添加新元素,例如,

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

我可以调用列表(位置)之类的列表项,我们可以像这个 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)将返回 category 的列表i

您还可以创建一个 ArrayList 数组,但这并不能确保编译时的类型安全。

于 2012-10-08T08:42:43.930 回答
-1

您是否尝试创建一个每个元素都是 ArrayList 的数组?如果是这样,

ArrayList[] list = new ArrayList[20];
for(int i=0; i<20; i++)
{
    list[i] = new ArrayList<String>();
}
于 2012-10-08T08:11:22.700 回答