Arrays
Arrays são contêineres para armazenar dados do mesmo tipo. Esta lição cobre como usar arrays em Java.
O que é um Array
Um array é uma coleção de tamanho fixo de elementos do mesmo tipo.
Características do Array
| Característica | Descrição |
|---|---|
| Tamanho fixo | O tamanho não pode ser alterado após a criação |
| Mesmo tipo | Todos os elementos devem ser do mesmo tipo |
| Armazenamento contíguo | Os elementos são armazenados sequencialmente na memória |
| Acesso por índice | Acesse elementos por índice (começando de 0) |
Declaração e Inicialização
Método 1: Declarar Primeiro, Inicializar Depois
// Declarar array
int[] arr;
// Inicializar (alocar espaço)
arr = new int[5]; // 5 elementos, valor padrão é 0
Método 2: Declarar e Inicializar
// Especificar tamanho
int[] arr = new int[5];
// Atribuição direta
int[] arr = {1, 2, 3, 4, 5};
Exemplo: Inicialização de Array
public class ArrayInit {
public static void main(String[] args) {
// Método 1: Especificar tamanho
int[] arr1 = new int[3];
arr1[0] = 10;
arr1[1] = 20;
arr1[2] = 30;
// Método 2: Atribuição direta
int[] arr2 = {10, 20, 30};
// Método 3: new + atribuição
int[] arr3 = new int[]{10, 20, 30};
System.out.println(arr2[0]); // 10
System.out.println(arr2[1]); // 20
System.out.println(arr2[2]); // 30
}
}
ArrayIndexOutOfBoundsException.
Acesso e Modificação
int[] arr = {10, 20, 30, 40, 50};
// Acessar elementos
int first = arr[0]; // 10
int third = arr[2]; // 30
// Modificar elementos
arr[1] = 200; // Mudar 20 para 200
// Obter comprimento do array
int len = arr.length; // 5
Travessia de Arrays
Método 1: Loop for Regular
int[] arr = {10, 20, 30, 40, 50};
for (int i = 0; i < arr.length; i++) {
System.out.println("arr[" + i + "] = " + arr[i]);
}
Método 2: Loop for-each
int[] arr = {10, 20, 30, 40, 50};
for (int num : arr) {
System.out.println(num);
}
Exemplo: Calcular Média
public class ArrayAverage {
public static void main(String[] args) {
int[] scores = {85, 92, 78, 96, 88};
int sum = 0;
for (int score : scores) {
sum += score;
}
double avg = (double) sum / scores.length;
System.out.println("Média: " + avg); // 87.8
}
}
Classe Utilitária Arrays
java.util.Arrays fornece métodos utilitários para operações com arrays.
Métodos Comuns
| Método | Descrição | Exemplo |
|---|---|---|
sort() |
Ordenar | Arrays.sort(arr) |
copyOf() |
Copiar | Arrays.copyOf(arr, newLen) |
fill() |
Preencher | Arrays.fill(arr, value) |
equals() |
Comparar | Arrays.equals(arr1, arr2) |
toString() |
Converter para string | Arrays.toString(arr) |
binarySearch() |
Busca binária | Arrays.binarySearch(arr, key) |
Exemplo: Usando Arrays
import java.util.Arrays;
public class ArraysDemo {
public static void main(String[] args) {
int[] arr = {5, 2, 8, 1, 9, 3};
// Ordenar
Arrays.sort(arr);
System.out.println("Ordenado: " + Arrays.toString(arr));
// [1, 2, 3, 5, 8, 9]
// Copiar
int[] arr2 = Arrays.copyOf(arr, 3);
System.out.println("Primeiros 3: " + Arrays.toString(arr2));
// [1, 2, 3]
// Preencher
int[] arr3 = new int[5];
Arrays.fill(arr3, 100);
System.out.println("Preenchido: " + Arrays.toString(arr3));
// [100, 100, 100, 100, 100]
// Buscar (deve ser ordenado primeiro)
int index = Arrays.binarySearch(arr, 5);
System.out.println("Índice de 5: " + index); // 3
}
}
Arrays Bidimensionais
Um array bidimensional pode ser pensado como "um array de arrays".
Declaração e Inicialização
// Método 1: Especificar tamanho
int[][] matrix = new int[3][4]; // 3 linhas, 4 colunas
// Método 2: Atribuição direta
int[][] matrix = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
Exemplo: Travessia de Array 2D
public class TwoDArrayDemo {
public static void main(String[] args) {
int[][] matrix = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
// Travessia
for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix[i].length; j++) {
System.out.print(matrix[i][j] + " ");
}
System.out.println();
}
// Saída:
// 1 2 3
// 4 5 6
// 7 8 9
}
}
Exemplo: Transposição de Matriz
public class MatrixTranspose {
public static void main(String[] args) {
int[][] matrix = {
{1, 2, 3},
{4, 5, 6}
};
// Transpor: 2 linhas 3 colunas → 3 linhas 2 colunas
int[][] transposed = new int[3][2];
for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix[i].length; j++) {
transposed[j][i] = matrix[i][j];
}
}
// Imprimir matriz transposta
for (int[] row : transposed) {
System.out.println(java.util.Arrays.toString(row));
}
// [1, 4]
// [2, 5]
// [3, 6]
}
}
Varargs (Argumentos Variáveis)
Varargs permitem que métodos aceitem um número variável de argumentos.
Sintaxe
public static int sum(int... numbers) {
int total = 0;
for (int num : numbers) {
total += num;
}
return total;
}
Exemplo: Varargs
public class VarargsDemo {
public static void main(String[] args) {
System.out.println(sum(1, 2)); // 3
System.out.println(sum(1, 2, 3)); // 6
System.out.println(sum(1, 2, 3, 4, 5)); // 15
}
public static int sum(int... numbers) {
int total = 0;
for (int num : numbers) {
total += num;
}
return total;
}
}
Algoritmos Comuns de Array
Exemplo: Bubble Sort
public class BubbleSort {
public static void main(String[] args) {
int[] arr = {5, 2, 8, 1, 9, 3};
for (int i = 0; i < arr.length - 1; i++) {
for (int j = 0; j < arr.length - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
System.out.println(java.util.Arrays.toString(arr));
// [1, 2, 3, 5, 8, 9]
}
}
Exemplo: Encontrar Máximo
public class FindMax {
public static void main(String[] args) {
int[] arr = {5, 2, 8, 1, 9, 3};
int max = arr[0];
for (int num : arr) {
if (num > max) {
max = num;
}
}
System.out.println("Máximo: " + max); // 9
}
}
❓ Perguntas Frequentes
P: O tamanho do array pode ser alterado? R: Não. O tamanho do array é fixo. Use ArrayList se precisar de dimensionamento dinâmico.
P: Os arrays têm valores padrão? R: Sim. int é 0, double é 0.0, boolean é false, e tipos de referência são null.
P: Qual algoritmo de ordenação o Arrays.sort() usa? R: Para primitivos, usa quicksort de pivô duplo. Para objetos, usa TimSort (uma variante do merge sort).
📖 Resumo
- Arrays são coleções de tamanho fixo do mesmo tipo, com índices começando de 0
- Use loops for regulares ou for-each para travessia
- A classe utilitária Arrays fornece métodos de ordenação, cópia, preenchimento e outros
- Arrays bidimensionais podem ser pensados como arrays de arrays
- Varargs permitem que métodos aceitem um número variável de argumentos
📝 Exercícios
- Operações com array: Crie um array com 10 elementos, atribua valores 1-10, depois imprima em ordem reversa
- Encontrar máximo/mínimo: Encontre os valores máximo e mínimo em um array
- Bubble sort: Implemente o algoritmo bubble sort para ordenar um array em ordem crescente
Próxima Lição
Na próxima lição, aprenderemos sobre Prática: Fundamentos — aplicando o conhecimento das primeiras 7 lições.



