/ / Como definir o tamanho de duas dimensões ArrayList? - java

Como definir o tamanho de duas dimensões ArrayList? - java

Então eu estou tentando fazer um bidimensionalArrayList que tem uma quantidade definida de ArrayLists, então cada um desses ArrayLists pode conter o quanto for necessário. Eu estou ciente de que as matrizes alteram dinamicamente o tamanho, mas estou tentando garantir que ele tenha pelo menos um certo tamanho nesse caso.

ArrayList<ArrayList<Integer>> integers = new ArrayList<ArrayList<Integer>>(10);

Isso não funciona. Eu quero ser capaz de definir a localização de um novo inteiro para um dos índices da primeira dimensão, da seguinte forma:

integers.get(7).add(new Integer(42));

Isso só me dá um IndexOutOfBoundsException, como se não houvesse ArrayLists Integer dentro do ArrayList. Existe uma maneira de fazer isso? Tenho certeza de que é algo simples que eu não estou vendo.

Respostas:

3 para resposta № 1

Matriz listas não trabalhe assim. Eles não são matrizes.

A lista que você criou é respaldada por uma matriz de pelo menos 10 elementos, mas ela mesma não contém nenhuma, portanto, você não pode se referir a 7 ou, na verdade, a qualquer elemento.

integers.size() would return 0
integers.isEmpty() would return true
integers.get(0) would throw

Além disso, a lista que você inicializou precisa ser preenchida com listas:

for (int i = 0; i < 10; ++i) {
row = new ArrayList<Integer>()
integers.add(row);
}
// now integers is a 10-element list of empty lists

Como alternativa, você pode usar matrizes primitivas (se desejar ter um retângulo de tamanho fixo).

int integers[][] = new int[10][];
for (int i = 0; i < integers.length; ++i) {
integers[i] = new int[10]; // rows are initialized to 0, as int is primitive
}
for (final int[] arr : integers) {
System.out.println(Arrays.toString(arr));
}

0 para resposta № 2

Você pode usar um loop aninhado para isso. Aqui está um pequeno exemplo:

import java.util.ArrayList;

public class PopulateArray {

public static void main(String[] args) {
ArrayList<ArrayList<Integer>> integers = new ArrayList<ArrayList<Integer>>();
int num_arrays_ to_populate = 10;
int num_indices_to_populate = 10;

for(int i = 0; i < num_arrays_to_populate; i++) {
integers.add(new ArrayList<Integer>());
for(int j = 0; j < num_indices_to_populate; j++) {

integers.get(i).add(0);

}
}
}
}

Isso criaria uma ArrayList de ArrayLists deints e preencha o top ArrayList com 10 ArrayLists e coloque um 0 nas primeiras 10 células de cada. Obviamente, você pode alterar qualquer um desses números para fazer o que quiser.

Nota / Aviso: Eu escrevi isso no meu telefone, então se eu perdi uma chave ou ponto-e-vírgula, apenas comente e eu adicionarei. A lógica está lá, no entanto.