Um array unidimensional (ou vetor) é uma estrutura de dados que armazena uma coleção de elementos do mesmo tipo em sequência. Pense nele como uma fileira de caixas numeradas, onde cada caixa pode guardar um valor.
Características principais:
Cada elemento de um vetor ocupa uma posição numerada, chamada de índice. O índice sempre começa em zero — não em 1. Isso significa que o primeiro elemento está na posição 0, o segundo na posição 1, e assim por diante.
Considere o vetor abaixo:
| Linha | Pos. 0 | Pos. 1 | Pos. 2 | Pos. 3 | Pos. 4 |
|---|---|---|---|---|---|
| Índice | 0 | 1 | 2 | 3 | 4 |
| Elemento (valor) | 10 | 20 | 30 | 40 | 50 |
| For tradicional | numeros[0] |
numeros[1] |
numeros[2] |
numeros[3] |
numeros[4] |
| For-each | numero = 10 |
numero = 20 |
numero = 30 |
numero = 40 |
numero = 50 |
For tradicional vs For-each: Com for (int i = 0; i < numeros.length; i++), você usa numeros[i] para acessar cada elemento pelo índice. Com for (int numero : numeros), a variável numero já recebe automaticamente cada valor, sem precisar do índice.
Atenção ao índice zero: Um vetor com 5 elementos vai do índice 0 ao índice 4. Acessar numeros[5] causaria um erro ArrayIndexOutOfBoundsException, pois essa posição não existe!
Existem três formas principais de declarar e inicializar vetores em Java:
public class DeclaracaoVetor1 {
public static void main(String[] args) {
// Declarando um vetor de 5 posições
int[] numeros = new int[5];
// Todos os elementos são inicializados com 0
System.out.println("Vetor criado com valores padrão:");
for (int i = 0; i < numeros.length; i++) {
System.out.println("numeros[" + i + "] = " + numeros[i]);
}
}
}
Vetor criado com valores padrão:
numeros[0] = 0
numeros[1] = 0
numeros[2] = 0
numeros[3] = 0
numeros[4] = 0
public class DeclaracaoVetor2 {
public static void main(String[] args) {
// Declarando e inicializando em uma linha
int[] numeros = {10, 20, 30, 40, 50};
// O tamanho é automaticamente definido
System.out.println("Tamanho do vetor: " + numeros.length);
System.out.println("\nElementos do vetor:");
for (int i = 0; i < numeros.length; i++) {
System.out.println("numeros[" + i + "] = " + numeros[i]);
}
}
}
Tamanho do vetor: 5
Elementos do vetor:
numeros[0] = 10
numeros[1] = 20
numeros[2] = 30
numeros[3] = 40
numeros[4] = 50
public class DeclaracaoVetor3 {
public static void main(String[] args) {
// Primeiro declara
int[] numeros;
// Depois inicializa
numeros = new int[]{15, 25, 35, 45, 55};
System.out.println("Vetor inicializado:");
for (int numero : numeros) {
System.out.println(numero);
}
}
}
Vetor inicializado:
15
25
35
45
55
Podemos usar loops para preencher vetores dinamicamente. A cada iteração, o índice i aponta para a posição que está sendo preenchida. Veja como o vetor fica organizado após o loop:
| Linha | Pos. 0 | Pos. 1 | Pos. 2 | Pos. 3 | Pos. 4 | Pos. 5 | Pos. 6 | Pos. 7 | Pos. 8 | Pos. 9 |
|---|---|---|---|---|---|---|---|---|---|---|
| Índice (i) | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| Valor gerado (i+1)×5 |
5 | 10 | 15 | 20 | 25 | 30 | 35 | 40 | 45 | 50 |
| For tradicional | numeros[0] | numeros[1] |
numeros[2] | numeros[3] |
numeros[4] | numeros[5] |
numeros[6] | numeros[7] |
numeros[8] | numeros[9] |
Como funciona a fórmula (i + 1) * 5? Quando i = 0, o resultado é (0+1)*5 = 5. Quando i = 1, é (1+1)*5 = 10. E assim por diante — a fórmula garante que os valores comecem em 5 (e não em 0) e subam de 5 em 5.
public class ConstruindoVetor {
public static void main(String[] args) {
// Criando vetor de 10 posições
int[] numeros = new int[10];
// Preenchendo com valores múltiplos de 5
for (int i = 0; i < numeros.length; i++) {
numeros[i] = (i + 1) * 5;
}
// Exibindo o vetor
System.out.println("Vetor preenchido com múltiplos de 5:");
for (int i = 0; i < numeros.length; i++) {
System.out.println("Posição " + i + ": " + numeros[i]);
}
}
}
Vetor preenchido com múltiplos de 5:
Posição 0: 5
Posição 1: 10
Posição 2: 15
Posição 3: 20
Posição 4: 25
Posição 5: 30
Posição 6: 35
Posição 7: 40
Posição 8: 45
Posição 9: 50
Podemos criar vetores de qualquer tipo de dado em Java. Quando vários vetores compartilham o mesmo índice para representar informações de um mesmo item, chamamos isso de vetores paralelos. O índice i conecta as informações de cada produto nos três vetores abaixo:
| Linha | Pos. 0 | Pos. 1 | Pos. 2 | Pos. 3 |
|---|---|---|---|---|
| Índice (i) | 0 | 1 | 2 | 3 |
| produtos[i] | Notebook | Mouse | Teclado | Monitor |
| precos[i] | 19.99 | 29.50 | 15.75 | 45.00 |
| disponivel[i] | true | false | true | true |
Vetores paralelos: Para este exemplo é necessário o for tradicional, pois o mesmo índice i precisa acessar produtos[i], precos[i] e disponivel[i] ao mesmo tempo — ou seja, as informações do mesmo produto. O for-each não fornece acesso ao índice, portanto não conseguiria correlacionar os três vetores.
public class VetoresDiferentesTipos {
public static void main(String[] args) {
// Vetor de double
double[] precos = {19.99, 29.50, 15.75, 45.00};
// Vetor de String
String[] produtos = {"Notebook", "Mouse", "Teclado", "Monitor"};
// Vetor de boolean
boolean[] disponivel = {true, false, true, true};
// Exibindo informações dos produtos
System.out.println("CATÁLOGO DE PRODUTOS:");
System.out.println("---------------------");
for (int i = 0; i < produtos.length; i++) {
String status = disponivel[i] ? "Disponível" : "Esgotado";
System.out.println(produtos[i] + " - R$ " + precos[i] + " - " + status);
}
}
}
CATÁLOGO DE PRODUTOS:
---------------------
Notebook - R$ 19.99 - Disponível
Mouse - R$ 29.5 - Esgotado
Teclado - R$ 15.75 - Disponível
Monitor - R$ 45.0 - Disponível
Vamos ver algumas operações úteis com vetores. Primeiro, observe a tabela de índices do vetor usado neste exemplo:
| Linha | Pos. 0 | Pos. 1 | Pos. 2 | Pos. 3 | Pos. 4 | Pos. 5 | Pos. 6 |
|---|---|---|---|---|---|---|---|
| Índice | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
| Elemento | 45 | 12 | 67 | 23 | 89 | 34 | 56 |
| For tradicional | numeros[0] |
numeros[1] |
numeros[2] |
numeros[3] |
numeros[4] |
numeros[5] |
numeros[6] |
| For-each | numero=45 |
numero=12 |
numero=67 |
numero=23 |
numero=89 |
numero=34 |
numero=56 |
Uma das operações mais comuns é acumular valores para calcular a soma — e depois a média. Veja a fórmula geral e como o loop executa cada etapa:
Fórmula geral de acumulação:
A variável soma começa em zero e, a cada iteração, recebe o valor acumulado até então somado ao próximo elemento do vetor.
| Iteração | Elemento atual | soma (antes) | Operação | soma (nova) |
|---|---|---|---|---|
| Loop 1 | 45 (numeros[0]) | 0 | 0 + 45 | 45 |
| Loop 2 | 12 (numeros[1]) | 45 | 45 + 12 | 57 |
| Loop 3 | 67 (numeros[2]) | 57 | 57 + 67 | 124 |
| Loop 4 | 23 (numeros[3]) | 124 | 124 + 23 | 147 |
| Loop 5 | 89 (numeros[4]) | 147 | 147 + 89 | 236 |
| Loop 6 | 34 (numeros[5]) | 236 | 236 + 34 | 270 |
| Loop 7 | 56 (numeros[6]) | 270 | 270 + 56 | 326 |
⬆️ Após o Loop 7, o vetor foi percorrido por completo. O loop encerra com soma = 326, e o programa calcula a média:
public class OperacoesVetores {
public static void main(String[] args) {
int[] numeros = {45, 12, 67, 23, 89, 34, 56};
// 1. Encontrar o maior valor
int maior = numeros[0];
for (int i = 1; i < numeros.length; i++) {
if (numeros[i] > maior) {
maior = numeros[i];
}
}
System.out.println("Maior valor: " + maior);
// 2. Encontrar o menor valor
int menor = numeros[0];
for (int i = 1; i < numeros.length; i++) {
if (numeros[i] < menor) {
menor = numeros[i];
}
}
System.out.println("Menor valor: " + menor);
// 3. Calcular a soma
int soma = 0;
for (int numero : numeros) {
soma += numero;
}
System.out.println("Soma total: " + soma);
// 4. Calcular a média
double media = (double) soma / numeros.length;
System.out.println("Média: " + media);
// 5. Contar números pares
int pares = 0;
for (int numero : numeros) {
if (numero % 2 == 0) {
pares++;
}
}
System.out.println("Quantidade de números pares: " + pares);
}
}
Maior valor: 89
Menor valor: 12
Soma total: 326
Média: 46.57142857142857
Quantidade de números pares: 4
Existem diferentes formas de copiar vetores em Java. Antes de ver o código, veja como o vetor original está organizado:
| Linha | Pos. 0 | Pos. 1 | Pos. 2 | Pos. 3 | Pos. 4 |
|---|---|---|---|---|---|
| Índice | 0 | 1 | 2 | 3 | 4 |
| original[i] | 10 | 20 | 30 | 40 | 50 |
| copia1[i] (após loop) | 10 | 20 | 30 | 40 | 50 |
| copia2[i] (após clone) | 10 | 20 | 30 | 40 | 50 |
Atenção — cópia de referência vs cópia de valor: Em Java, fazer int[] copia = original não copia o conteúdo — apenas cria outro nome apontando para o mesmo vetor na memória. Qualquer mudança em original também apareceria em copia. Para ter um vetor independente, use o loop manual ou .clone().
public class CopiandoVetores {
public static void main(String[] args) {
int[] original = {10, 20, 30, 40, 50};
// Forma 1: Loop manual
int[] copia1 = new int[original.length];
for (int i = 0; i < original.length; i++) {
copia1[i] = original[i];
}
// Forma 2: Usando clone()
int[] copia2 = original.clone();
// Modificando o vetor original
original[0] = 999;
// Verificando as cópias (não foram afetadas)
System.out.println("Original[0]: " + original[0]);
System.out.println("Copia1[0]: " + copia1[0]);
System.out.println("Copia2[0]: " + copia2[0]);
}
}
Original[0]: 999
Copia1[0]: 10
Copia2[0]: 10
Teste seus conhecimentos sobre arrays unidimensionais em Java:
Reforce o conteúdo desta aula com mais dois exercícios práticos: