我对java有一个疑问,我们可以在for循环中创建动态ArrayList
或String[]
吗?例如,在我的应用程序中有类别字段(不是静态的,从服务器获取),我想根据类别的大小创建ArrayList
或String[]
对象。如何在循环中创建动态ArrayList
?
我的代码如下:
for(int i =0; i<20; i++)
{
ArrayList <String> list(i) = new ArrayList<String>();
}
我们可以创建这样的对象吗? 基于类别位置,我可以调用list(positon)之类的列表项,我们可以像这样java吗?
答案 0 :(得分:4)
ArrayList
的重点是你不必担心大小。随着更多项目的添加,它将动态调整自身大小。您可以看到add
的{{3}}:
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 }
答案 1 :(得分:4)
ArrayList
是动态数组,即您可以添加新元素,如
ArrayList <String> list = new ArrayList<String>();
for(int i =0; i<20; i++)
{
list.add("string"+i);
}
我可以调用list(positon)这样的列表项,我们可以这样做吗?
ArrayList有get(position)
方法从位置获取Object。
String str1 = list.get(0);//0th position
答案 2 :(得分:1)
如果我明白你想做什么,我会这样做。 (顺便说一句,如果这是正确的,描述你想要做的事情的术语是“嵌套的arraylists”,而不是“动态arraylists”。Arraylists(就像其他人已经指出的那样)默认是动态的。)
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数组,但这不能确保编译时的类型安全。
答案 3 :(得分:-1)
您是否尝试创建一个数组,每个元素都是一个ArrayList?如果是的话,
ArrayList[] list = new ArrayList[20];
for(int i=0; i<20; i++)
{
list[i] = new ArrayList<String>();
}