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 № 1Matriz 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.