Boa tarde galera. Estou com uma dúvida em relação a o que são vetores e matrizes dinâmicas, como funcionam e como declarar na linguagem Java. Agradeço a todos que poderem ajudar.
Dinâmica em qual sentido redimensionamento ou armazenamento?
Se a questão é redimensionamento, em java, uma vez criada o vetor/matriz usando new, não se pode mudar seu tamanho, exemplo:
int[] vetor = new int[10];
Uma vez com 10 posições definidas, morrerá com 10 posições definidas…
O que existe é um “conceito de redimensionamento”, essa apostila diz melhor sobre o assunto
Agora quanto ao armazenamento, vetores costumam armazenar apenas um tipo, como em…
String[] vetor = new String[10];
Caso queira “dinamizá-lo” fazendo-o com que armazene qualquer tipo, precisa usar:
Object[] vetor = new Object[10];
Mas cuidado com essa última abordagem, pode gerar conflitos e/ou comportamentos inesperados em sua aplicação se mal administrado…
O que você quer dizer com dinâmica? Vou assumir que você se refere ao tamanho mutável.
Infelizmente, uma vez criado, um objeto do tipo Array
em Java é imutável. É impossível modificar o tamanho de um Array
. Você pode modificar os valores que ele contem, mas ele em si, não.
Exemplo:
int[] array_de_ints = new int[5]; // esse objeto instanciado só vai poder ter 5 elementos
Caso tu precise de mais espaço, pode criar um novo array e copiar o conteúdo do velho para o novo, assim:
int[] array_velho = new int[3];
int[] array_novo = new int[100];
System.arrayCopy(array_velho, 0, array_novo, 0, array_velho.length); // copia todo o conteúdo de array_velho para array_novo, a partir da posição 0
Para facilitar isso, existem estruturas de dados como a ArrayList
, que aloca os arrays internamente de forma automática.
ArrayList<Integer> ints = new ArrayList<>(); // esse construtor aloca um array com 10 posições internamente, um new Integer[10], de acordo com a documentação
ints.add(0); // coloca o numero 0 na primeira posicao do array alocado
ints.add(1);
ints.add(2);
...
ints.add(9); // 10 elementos foram inseridos até aqui
ints.add(10); // o objeto aloca um novo array de Integer, (new Integer[11], por exemplo), e adiciona o novo elemento no final de forma transparente para você
// Também dá para especificar a capacidade inicial do Array se você quiser, assim:
ArrayList<Integer> capacidade_especificada = new ArrayList<>(5);
// Porem, se você tentar acessar uma posição do array que não foi populada, mesmo se ela existir na memória, o ArrayList vai atirar uma IndexOutOfBoundsException
capacidade_especificada.get(0); // IndexOutOfBoundsException, posição está alocada internamente, porém não foi populada
Sobre matrizes: não existem matrizes explicitamente em Java. O que você pode fazer é utilizar Array
s de múltipla dimensão, assim:
int[][] matriz = new int[5][6]; // cria uma "matriz" 5x6, que na verdade é um array de arrays de ints
matriz[0][0] = 1;
Com isso você pode criar não só matrizes, mas qualquer quantidade de dimensões, como cubos:
int[][][] cubo = new int[5][10][20];
cubo[4][9][19] = 123;