O que é uma matriz?
- Array é uma coleção de elementos, cada um identificado por um índice ou chave.
- Arrays têm um tamanho fixo e dinâmico
- Elementos homogêneos → todos os elementos em uma matriz são do mesmo tipo de dados.
- Elementos heterogêneos → permitindo diferentes tipos de dados no mesmo array.
// Homogeneous
int[] intArray = new int[5]; // Array of integers String[]
stringArray = new String[5]; // Array of strings
// Heterogeneous
mixedArray = [1, "hello", 3.14, True] # Mixed data types in one list
Características das matrizes
- Indexação: Indexação baseada em zero na maioria das linguagens de programação.
- Tamanho: Tamanho fixo (estático), não pode ser alterado dinamicamente (exceto em linguagens com arrays dinâmicos).
- Alocação de memória: alocação de memória contígua para elementos do array. o que significa que cada elemento está diretamente próximo ao anterior na memória. Isso é possível porque todos os elementos são do mesmo tamanho, permitindo ao sistema calcular o endereço de memória de qualquer elemento usando seu índice.

Operações de matriz
- Inserção: normalmente envolve elementos variáveis, complexidade de tempo O(n).
- Exclusão: semelhante à inserção, os elementos podem precisar ser deslocados. Exceto o último índice
- Traversal: Iterando através de todos os elementos, O(n) complexidade de tempo.
- Tempo de acesso: O(1) complexidade de tempo para acessar um elemento usando seu índice.
Tipos de matrizes
- Matriz unidimensional: forma mais simples, como uma lista.
- Matriz multidimensional: Matrizes de matrizes (por exemplo, matriz 2D).
- Jagged Array: Matrizes com diferentes comprimentos de submatrizes.
- Arrays dinâmicos (por exemplo, ArrayList em Java): arrays que podem crescer de tamanho dinamicamente.
Vantagens de matrizes
- Eficiência: O(1) tempo de acesso para elementos.
- Utilização de memória: uso eficiente de memória devido ao armazenamento contíguo.
- Facilidade de uso: simplifica o gerenciamento de dados e operações como classificação e pesquisa
Desvantagens das matrizes
- Tamanho fixo: não é possível alterar o tamanho depois de declarado. exceto matriz dinâmica
- Custo de inserção/exclusão: O(n) para inserir ou excluir um elemento, especialmente no meio.
- Desperdício de memória: elementos não utilizados ainda ocupam espaço.
Aplicações de matrizes no mundo real
- Armazenamento de dados: comum na programação para armazenamento de coleções de elementos.
- Algoritmos de classificação: muitos algoritmos de classificação são projetados para matrizes (por exemplo, QuickSort, MergeSort).
- Operações matriciais: matrizes 2D são usadas para operações matriciais em matemática e gráficos.
- Implementando pilhas e filas: estruturas de dados básicas podem ser implementadas usando arrays.
Melhores práticas com matrizes
- Evite cópias desnecessárias: esteja atento às operações que exigem a cópia de elementos.
- Use matrizes dinâmicas quando necessário: se o tamanho for incerto, prefira matrizes dinâmicas.
- Aproveite as funções integradas: utilize funções específicas da linguagem para operações de array.
- Verificação de limite: sempre verifique as condições de limite para evitar IndexOutOfBoundsException.
Exemplo de array estático e dinâmico em GO
package main
import (
"fmt"
"unsafe"
)
func main() {
// Static Array
var staticArr [5]int64
staticArr[0] = 1
staticArr[1] = 2
staticArr[2] = 3
staticArr[3] = 4
staticArr[4] = 5
elementSize := unsafe.Sizeof(staticArr[0])
totalSize := elementSize * uintptr(len(staticArr))
fmt.Printf("Memory used by static array: %d bytes\n", totalSize)
fmt.Println()
// Dynamic Array (Slice)
dynamicArr := make([]int32, 0, 5)
before := unsafe.Sizeof(dynamicArr[0])
beforeTotal := before * uintptr(len(dynamicArr))
fmt.Printf("Memory used by dynamic array (before): %d bytes\n", beforeTotal)
// Append elements to dynamic array
for i := 0; i