Vetores e matrizes Dinâmicas

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…

1 curtida

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 Arrays 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;
1 curtida