Java中的动态ArrayList

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

我的代码如下:

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

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

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

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

我可以调用list(positon)之类的列表项,我们可以像这样java吗?

ArrayList有get(position)方法从位置获取Object。

 String str1 = list.get(0);//0th position 

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 } 

如果我明白你想做什么,我会做如下。 (顺便说一句,如果这是正确的,描述你想要做的事情的术语是“嵌套的arraylists”,而不是“动态arraylists”。Arraylists(就像其他人已经指出的那样)默认是动态的)。

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

现在你可以做,例如:

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

list.get(i)将返回类别i的列表。

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

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

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